set.seed(12345) # for reproducibility
options(knitr.kable.NA = '')

# Some packages need to be loaded. We use `pacman` as a package manager, which takes care of the other packages. 
if (!require("pacman", quietly = TRUE)) install.packages("pacman")
if (!require("Rmisc", quietly = TRUE)) install.packages("Rmisc") # Never load it directly.
# if (!require("kableExtra", quietly = TRUE)) install.packages("kableExtra") # Never load it directly.

pacman::p_load(tidyverse, papaja, knitr, ggplot2, car, lme4, afex, emmeans, parallel, ordinal, psych, gridExtra, ggbeeswarm, RVAideMemoire, apaTables, scales, matlab, rcompanion, nortest, psycho, ggpubr, MuMIn)
devtools::install_github("thomasp85/patchwork")
remotes::install_github("rlesur/klippy")
library("patchwork"); library("klippy")
klippy::klippy()

1 방법


1.1 참가자


정상 시력의 학부생 및 대학원생 16명(여 8명, 평균 연령 25.56세, 표 준 편차 2.15세)이 인터넷을 통해 모집되어 예비 실험에 참여하였다. 참가자들은 실 험에 앞서 서면으로 작성된 실험 참가 동의서에 서명하였으며, 3일간 진행되는 2시간 30분의 실험에 참여하여 25,000원 상당의 문화상품권을 참가 보상으로 수령하였다.


1.2 장치 및 자극


예비 실험의 자극 제시 및 반응 수집은 Psychophysics Toolbox-3을 사용한 Matlab 스크립트에 의해 제어되었다(Brainard, 1997; Pelli, 1997; Kleiner, Brainard, & Pelli, 2007). 실험 화면은 해상도 1920 × 1080, 주사율 60Hz인 Dell 22인치 LCD 모니터를 이용해 제시되었다. 참가자들의 머리는 턱-이마 받침대를 통해 고정되었으며, 참가자의 눈과 모니터 사이의 거리는 63cm였다. 참가자의 반응은 반응 상자(DirectIN High Speed Button-Box; EmpiriSoft Corp.)를 사용하여 기록하였다.


기억 자극으로 인터넷과 장기 기억 실험을 위해 구성된 물체 자극(Brady, Konkle, Alvarez, & Oliva, 2008)에서 수집된 240개의 물체 그림이 사용되었다. 물체(7.21° × 7.21°)는 색을 회색조로 조정한 후 각 회기에 제시되는 세 개의 물체 목록(목록 1, 첫 회기에 학습; 목록 2, 두 번째 회기에 학습; 목록 3, 출처 기억 검사에 활용)에 80개씩 무선 할당되었다. 이어서 학습이 이루어지는 물체 목록(목록 1과 목록 2)에서 네 개의 하위 연합 기억을 형성하기 위해 네 가지 색을 사용한 연합 색 상자 자극(11.98° × 11.98°)을 구성하였다. 네 가지 색은 주황색[RGB 237, 125, 39], 노란색[255, 192, 0], 파란색[90, 155, 213], 초록색[112, 173, 70]으로 설정되었다. 목록 1과 목록 2의 물체 80개는 네 가지 색에 20개씩 무작위로 할당되었다. 이에 따라 총 세 개의 물체 목록이 구성되었으며, 이 중 두 개의 물체 목록(목록 1, 목록 2)에서는 네 개의 하위 물체 목록이 구분되었다.


1.3 실험 설계와 절차


예비 실험은 2(집단: 실험 집단, 통제 집단) × 4(예측 오류: 0%-PE 1, 30%-PE 2, 70%-PE 3, 100%-PE 4)의 혼합 요인 설계로 진행되었다. 전체적인 실험 절차와 과제는 그림 1과 같다. 실험은 별도로 준비된 실험실에서 24~48시간의 간격으로 3일간 진행되었다.



첫째 날은 물체 80개의 목록 1을 학습하는 과제와 검사하는 과제로 구성되었다(그림 1B). 학습 과제는 물체 자체, 물체와 네 가지 색 간의 연합을 학습하는 연합 학습 과제로, 목록 1의 모든 물체가 네 가지 색과 각각 연합되어 제시되었다. 각 시행에서는 물체와 연합될 네 가지 색 상자 중 하나가 500ms 동안 제시된 후, 색 상자 위에 물체가 2500ms 동안 함께 제시되었다. 참가자들은 별도의 버튼 반응 없이 물체 자체와 물체-색 간의 연합을 외우도록 지시받았다. 학습 과제가 끝나면 지시문 화면이 제시되고 검사 과제가 시작되었다. 검사 과제는 학습한 물체를 상기하고 물체-색 연합 학습 수행 결과를 확인하기 위한 연합 검사 과제였다. 각 시행에서는 학습 과제에서 제시된 목록 1의 물체와 네 가지 색 선택지가 2000ms 동안 제시되었다. 참가자들은 이전에 학습한 물체를 상기하고 물체와 연합되었던 색을 버튼을 눌러 반응하도록 지시받았다. 참가자가 버튼을 누르거나 화면 제시 후 2000ms가 지나면 피드백 화면이 1000ms 동안 제시되었다. 참가자들이 자신의 반응을 점검할 수 있도록 피드백 화면에는 반응이 맞았는지 틀렸는지 여부와 정답이 무엇인지가 함께 제시되었다. 모든 검사 시행이 끝나면 1분의 휴식 시간이 주어졌다. 휴식 시간에는 검사에서의 정확도와 평균 반응시간을 제시하여 참가자들이 학습 의지를 고취할 수 있도록 유도하였다. 물체 자체와 물체와 색 간의 연합에 대한 견고한 기억을 형성하기 위하여 연합 학습 및 검사 과제는 총 네 번 반복 수행되었다. 각 과제 내의 개별적인 시행 순서는 무작위로 설정되었다. 모든 과제 수행에는 약 50분이 소요되었다.


둘째 날의 실험은 목록 1 재활성화 과제, 작업 기억 과제, 새로운 물체 80개로 구성된 목록 2 연합 학습 및 검사 과제로 구성되었다(그림 1B와 1C). 각 과제의 수행 순서는 집단에 따라 조작되었다. 구체적으로, 실험 집단은 목록 1 재활성화 과제, 작업 기억 과제, 목록 2 연합 학습 및 검사 과제의 순서로 과제를 수행하였고, 통제 집단은 목록 2 연합 학습 및 검사 과제, 작업 기억 과제, 재활성화 과제의 순서로 과제를 수행하였다(그림 1A).


실험 집단에서는 재응고를 유도하기 위해 목록 1 재활성화 과제부터 수행되었다. 과제는 첫째 날 학습한 목록 1의 물체, 물체-색 연합에 대한 기억을 재활성화하기 위한 과제로, 연합 학습 과제와 유사한 절차로 진행되었다. 참가자들은 색과 이에 연합되었던 물체를 보며 첫날의 기억을 상기하도록 지시받았다. 기억 재활성화 중의 예측 오류 정도를 조절하기 위해, 목록 1에 포함된 네 가지 연합 기억에서 예측 오류의 조작을 다르게 적용하였다. 예측 오류의 조작은 각 연합 기억(색)에 할당된 20회의 시행에서 일반 시행과 예측 오류 시행의 비율로 조절되었다. 일반 시행은 제시된 색으로부터 예측되는 물체가 온전히 등장하는 시행이었던 반면, 예측 오류 시행은 색으로부터 예측되는 물체가 생략되고, 잡음 이미지만 등장하는 시행이었다. 잡음 이미지는 시각적 입력이 유사하게 유지될 수 있도록 원래 물체 이미지가 픽셀 단위로 섞인 이미지로 구성되었다. 네 가지 예측 오류 조건은 예측 오류 시행이 0%(0 시행)인 PE 1 조건, 예측 오류 시행이 30%(6 시행)인 PE 2 조건, 예측 오류 시행이 70%(14 시행)인 PE 3 조건, 마지막으로 모든 시행(100%; 20 시행)이 예측 오류 시행으로 구성된 PE 4 조건으로 구분되었다. 시행이 시작되면 500ms 동안 응시점이 제시된 후, 1000ms 동안 네 가지 색 중 하나가 먼저 제시되어 연합된 물체에 대한 재활성화가 유도되었다. 이어서 색에 할당된 예측 오류 조건에 따라 일반 시행과 예측 오류 시행으로 구분되어 물체 또는 잡음 이미지가 2500ms 동안 제시되었다. 모든 조건의 시행은 무작위의 순서로 진행되었다. 과제가 끝나면 참가자들의 암송을 방지하고 재응고 과정에서 발생하는 시냅스 불안정화가 충분히 이루어지도록 유도하기 위해(Monfils, Cowansage, Klann, & LeDoux, 2009; Schiller et al., 2010; Sinclair et al., 2018), 작업 기억 과제가 진행되었다. 과제는 다섯 자리의 수를 암송하였다가 이어서 제시되는 자릿수의 수가 짝수인지 홀수인지 반응하는 는 것으로, 15 시행의 두 개 블록으로 약 5분간 진행되었다. 작업 기억 과제가 끝난 후, 간섭 학습 과제로 목록 2의 연합 학습 및 검사 과제가 진행되었다. 과제의 절차는 제시되는 물체를 제외하고 목록 1 연합 학습 및 검사 과제와 동일하였다. 학습 과제에서 목록 2의 물체 80개는 이전 과제와 동일한 색에 20개씩 연합되었다. 이후 검사 과제에서 이 연합이 잘 형성되었는지 검사하였다. 견고한 기억을 형성하기 위해 학습 및 검사는 총 네 번 반복 수행되었다. 통제 집단의 절차는 각 과제의 수행 순서를 제외하고 실험 집단과 동일하였다. 구체적으로, 간섭 과제로 목록 2 연합 학습 및 검사 과제를 먼저 수행한 후, 작업 기억 과제와 목록 1 재활성화 과제를 수행하였다. 모든 과제 수행에는 약 60분의 시간이 소요되었다.


마지막 날에 참가자들은 출처 기억 및 연합 기억 검사를 수행하였다. 과제에는 첫째 날 학습한 목록 1, 둘째 날 학습한 목록 2와 학습하지 않은 목록 3의 물체 80개가 함께 제시되어 총 240개의 물체가 사용되었다. 시행이 시작되면 먼저 물체의 이미지가 제시되었다. 참가자들은 제시된 물체를 언제 학습하였는지(첫째 날, 둘째 날, 학습하지 않음) 반응한 후, 이에 대한 확신도를 1점(매우 불확실)에서 4점(매우 확실)의 척도로 응답하였다. 이어서 물체를 학습한 것으로 반응한 경우, 해당 물체와 연합되었던 색을 검사하였다. 또한 색 반응에 대한 확신도도 동일하게 1점에서 4점 척도로 수집하였다. 모든 시행은 특정한 제한 시간 없이 진행되었다. 과제가 끝나면 실험 과제에 대한 피드백을 받은 후 사후설명과 참가비를 제공하였다.


1.4 통계 분석


예비 실험은 실험 패러다임의 타당화와 연구 목표 검증의 가능성을 확인하기 위하여 적은 참가자 수로 수행되었다. 따라서 모든 측정치를 분석하지 않고 연합 기억 학습 수행과 셋째 날의 출처 및 연합 기억 검사 결과의 일부만 분석하였다. 적은 참가자 수를 고려하여 분석 결과의 기술통계를 표로 제시하였다. 이어서 기술 통계 결과를 보완하고 기억 갱신 효과의 경향성을 확인하기 위해 잠정적인 통계 분석을 수행하였다. 모든 분석은 R(R Core Team, 2019) 프로그램을 사용하여 수행되었다. 먼저 목록 1과 목록 2의 기억이 성공적으로 형성되었는지 확인하기 위해 두 물체 목록의 연합 기억 정확도와 반응시간을 분석하였다. 반응시간에서는 가외치를 제거하기 위하여 150ms보다 빠르거나, 참가자 별 반응시간 분포의 평균으로부터 3 표준편차를 벗어난 시행을 제거하였다. 연합 기억 과제의 정확도와 반응 시간에서 집단 간 차이, 목록 간 차이가 있는지 비교하였다.


셋째 날의 출처 기억 반응은 여러 종속 변인으로 구분되어 분석되었다. 주요 종속 변인은 첫째 날 학습한 물체 목록을 첫째 날 학습한 것으로 옳게 분류한 목록 1 정확반응(List 1 Correct, L1→D1), 둘째 날 학습한 물체 목록을 둘째 날 학습한 것으로 옳게 분류한 목록 2 정확반응(List 2 Correct, L2→D2), 첫째 날 학습한 물체를 둘째 날 학습한 것으로 잘못 분류한 출처 혼동(Source Confusion, L1→D2), 둘째 날 학습한 물체를 첫째 날 학습한 것으로 잘못 분류한 침범(Intrusion, L2→D1)의 네 가지였다. 이 외에, 목록 3과 관련된 변인으로 목록 3을 학습하지 않은 것으로 옳게 분류한 목록 3 정확반응(List 3 Correct, L3→New), 목록 3을 학습한 것으로 잘못 분류한 목록 3 오경보 1과 2(List 3 False Alarm - Day 1&2, L3→D1&2), 목록 1과 2를 학습하지 않은 것으로 잘못 분류한 누락(Miss, L1&2→New)을 측정하였다. 이어서 연합 기억이 셋째 날까지 잘 유지되었는지 확인하기 위해 각 집단, 물체 목록에서 연합 기억 정확도를 분석하였다. 모든 추론 통계 분석은 혼합 요인 분산 분석 및 Tukey의 짝 비교 사후 검정 방법을 통해 수행되었으며, Mauchly(1940)의 구형성 검증에서 구형성 가정이 충족되지 않으면 Greenhouse-Geisser(1959)의 교정된 자유도 상수를 사용하였다.






2 결과


2.1 목록 1, 목록 2의 연합 학습 수행


학습 및 검사 절차를 통해 물체-색 연합의 기억이 안정적으로 형성되었는지 확인하기 위해, 각 집단에서 연합 기억 정확도와 반응 시간의 변화를 블록 반복에 따라 분석하였다.



2.1.1 목록 1 정확도 및 반응시간

p1 <- read.csv("MemUdt_PE_d1t2_p.csv", header = T) 

p1$SN = factor(p1$SN); p1$Btw = factor(p1$Btw)
p1$Block = factor(p1$Block, levels=c(1,2,3,4), labels=c("b1","b2","b3","b4"))
p1$cCue = factor(p1$cCue, levels=c(1,2,3,4), labels=c("c1","c2","c3", "c4"))
p1$CueName = factor(p1$CueName, labels=c("c1","c2","c3", "c4"))
p1$RT <- p1$RT*1000; p1$Corr <- as.numeric(p1$Corr==1)

glimpse(p1, width=70)
## Rows: 5,120
## Columns: 12
## $ SN      <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ Btw     <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ Trial   <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1…
## $ Block   <fct> b1, b1, b1, b1, b1, b1, b1, b1, b1, b1, b1, b1, b1, …
## $ bTrial  <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1…
## $ cCue    <fct> c4, c2, c2, c3, c3, c4, c1, c2, c2, c3, c1, c2, c2, …
## $ IMidx   <int> 223, 74, 151, 200, 125, 83, 155, 77, 89, 12, 50, 161…
## $ IMname  <chr> " man309.jpg", " man106.jpg", " man201.jpg", " man27…
## $ CueName <fct> c4, c2, c2, c3, c3, c4, c1, c2, c2, c3, c1, c2, c2, …
## $ Resp    <int> 2, 4, 1, 2, 3, 2, 3, 1, 4, 2, 3, 1, 3, 2, 4, 3, 3, 1…
## $ RT      <dbl> 1287.5, 1825.2, 843.1, 1463.6, 1503.6, 1478.1, 1673.…
## $ Corr    <dbl> 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0…
# 1. SN: participant ID
# 2. Btw: between-participants factor. 1-experimental group, 2-control group
# 3. Trial: 1 ~ 320
# 4. Block: b1 ~ b4
# 5. bTrial: 1 ~ 80
# 6. cCue: association color cue condition. 1-c1, 2-c2, 3-c3, 4-c4
# 7. IMidx: index of stimuli
# 8. IMname: name of stimuli
# 9. CueName: name of color cue
# 10. Resp: association color cue response
# 11. RT: association color cue response time
# 12. Corr: color cue response correctness. 1-correct, 0-incorrect

length(unique(p1$SN))
## [1] 16
length(unique(p1$SN[p1$Btw==1]))
## [1] 8
length(unique(p1$SN[p1$Btw==2]))
## [1] 8
table(p1$SN)
## 
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16 
## 320 320 320 320 320 320 320 320 320 320 320 320 320 320 320 320


2.1.1.1 정확도 (Accuracy)


# phase 1, subject-level, long-format
p1.L.long.all <- p1 %>% group_by(SN, Btw, Block) %>% 
  summarise(Accuracy = mean(Corr)*100) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p1.L.long.exp <- p1.L.long.all %>% filter(Btw == 1)
p1.L.long.con <- p1.L.long.all %>% filter(Btw == 2) 

# wide format, needed for geom_segments.
p1.L.swide.all <- p1.L.long.all %>% spread(key = Block, value = Accuracy)
p1.L.swide.exp <- p1.L.swide.all %>% filter(Btw == 1)
p1.L.swide.con <- p1.L.swide.all %>% filter(Btw == 2)


# summary table
p1.L.g.all <- p1.L.long.all %>% group_by(Btw, Block) %>%
  summarise(Acc.M = mean(Accuracy), SD = sd(Accuracy)) %>% ungroup()
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p1.L.g.all$se <- Rmisc::summarySEwithin(data = p1.L.long.all, measurevar = "Accuracy", idvar = "SN", betweenvars ="Btw", withinvars = "Block")$se
p1.L.g.all$ci <- Rmisc::summarySEwithin(data = p1.L.long.all, measurevar = "Accuracy", idvar = "SN", betweenvars ="Btw", withinvars = "Block")$ci
p1.L.g.exp <- p1.L.g.all %>% filter(Btw == 1)
p1.L.g.con <- p1.L.g.all %>% filter(Btw == 2)
p1.L.g.all %>% kable()
Btw Block Acc.M SD se ci
1 b1 46.87500 17.0346286 4.149565 9.812162
1 b2 83.12500 10.3725255 1.781850 4.213407
1 b3 94.68750 2.7345344 1.996032 4.719865
1 b4 98.75000 0.9449112 3.054830 7.223524
2 b1 51.87500 13.7905247 3.382224 7.997690
2 b2 83.28125 5.8224282 1.357775 3.210627
2 b3 93.43750 4.6651252 1.368861 3.236841
2 b4 96.87500 2.8347335 1.735829 4.104583
## plot

p1.all.plot1 <- ggplot(p1.L.g.all, mapping=aes(x=Block, y=Acc.M, group=Btw)) + 
  geom_ribbon(p1.L.g.all, mapping=aes(x=Block, ymin=Acc.M-ci, ymax=Acc.M+ci, fill=Btw), alpha=0.5) + 
  geom_line(p1.L.g.all, mapping=aes(x=Block, y=Acc.M, color=Btw), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = Block, ymin=Acc.M-ci, ymax=Acc.M+ci, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("#feb24c", "#91bfdb"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#feb24c", "#91bfdb")) +
  coord_cartesian(ylim = c(25, 105), clip = "on") +
  labs(x = "Block", y = "Accuracy (%)", fill="Group") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 1 Association Memory (All Group)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position="top")
p1.exp.plot1 <- ggplot(p1.L.g.exp, mapping=aes(x=Block, y=Acc.M, group=1)) + 
  geom_ribbon(aes(ymin=Acc.M-ci, ymax=Acc.M+ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = Block, ymin=Acc.M-ci, ymax=Acc.M+ci), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p1.L.long.exp, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=Block, y=Accuracy, group=SN, color=SN)) +
  geom_point(p1.L.long.exp, mapping = aes(x=Block, y=Accuracy, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(25, 105), clip = "on") +
  labs(x = "Block", y = "Accuracy (%)") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 1 Association Memory (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
p1.con.plot1 <- ggplot(p1.L.g.con, mapping=aes(x=Block, y=Acc.M, group=1)) + 
  geom_ribbon(aes(ymin=Acc.M-ci, ymax=Acc.M+ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = Block, ymin=Acc.M-ci, ymax=Acc.M+ci), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p1.L.long.con, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=Block, y=Accuracy, group=SN, color=SN)) +
  geom_point(p1.L.long.con, mapping = aes(x=Block, y=Accuracy, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(25, 105), clip = "on") +
  labs(x = "Block", y = "Accuracy (%)") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 1 Association Memory (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))

ggpubr::ggarrange(p1.all.plot1, p1.exp.plot1, p1.con.plot1, ncol=3, labels=c("A) All Group","B) Experimental","C) Control"))


2.1.1.1.1 혼합 요인 분산 분석


집단과 블록을 요인으로 한 2 X 4 혼합 요인 분산 분석을 수행하였다.

p1.acc.aov <- aov_ez(id = "SN", dv = "Accuracy", data = p1.L.long.all, between = "Btw", within = "Block")
# test_levene(p1.acc.aov) 
# test_sphericity(p1.acc.aov)
anova(p1.acc.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 174.369 0.024 0.002 0.880
Block 1.324 18.542 117.517 149.909 0.915 0.000
Btw:Block 1.324 18.542 117.517 0.747 0.051 0.435

분석 결과, 블록의 주효과가 유의하였다.

p1.acc.m1 <- emmeans(p1.acc.aov, pairwise ~ Block | Btw, type = "response") # adjust="bon"
p1.acc.m1$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
b1 - b2 1 -36.250 3.557 14 -10.191 0.000
b1 - b3 1 -47.812 4.631 14 -10.325 0.000
b1 - b4 1 -51.875 5.324 14 -9.743 0.000
b2 - b3 1 -11.562 2.399 14 -4.821 0.001
b2 - b4 1 -15.625 2.929 14 -5.335 0.001
b3 - b4 1 -4.062 1.023 14 -3.972 0.007
b1 - b2 2 -31.406 3.557 14 -8.830 0.000
b1 - b3 2 -41.562 4.631 14 -8.976 0.000
b1 - b4 2 -45.000 5.324 14 -8.452 0.000
b2 - b3 2 -10.156 2.399 14 -4.234 0.004
b2 - b4 2 -13.594 2.929 14 -4.641 0.002
b3 - b4 2 -3.438 1.023 14 -3.361 0.021

집단에서의 블록 차이를 사후 분석한 결과, 두 집단 모두 블록 반복에 따라 정확도가 향상되었다


2.1.1.2 반응시간 (Response Time)


목록 1 연합 기억 수행의 반응시간을 분석하였다.

p1.acc.trial <- p1 %>% group_by(SN) %>% 
  summarise(Accuracy = mean(Corr)*100) %>% 
  ungroup() %>% summarise(M = mean(Accuracy), SD = sd(Accuracy))

cp1.all <- p1 %>% filter(Corr==1)

sp1.all <- cp1.all %>% filter(RT > 150) %>% 
  group_by(SN) %>% 
  nest() %>% 
  mutate(lbound = map(data, ~mean(.$RT)-3*sd(.$RT)),
         ubound = map(data, ~mean(.$RT)+3*sd(.$RT))) %>% 
  unnest(c(lbound, ubound)) %>% 
  unnest(data) %>% 
  ungroup() %>% 
  mutate(Outlier = (RT < lbound)|(RT > ubound)) %>% 
  filter(Outlier == FALSE) %>% 
  select(SN, Btw, Block, cCue, CueName, Resp, RT, Corr, IMname)

100 - 100*nrow(sp1.all)/nrow(cp1.all)
## [1] 1.830002
## [1] 1.83

연합 기억 검사에서 정확하게 반응한 시행(M = 81.11%, SD = 6.38%)의 반응 시간 자료만 분석하였다. 가외치 제거 결과, 정확반응 시행의 반응시간 자료에서 1.83%가 제거되었다.


sp1.all %>% group_by(SN, Btw, Block) %>% 
  summarise(NumTrial = length(RT)) %>% 
  ungroup %>% 
  group_by(Btw, Block) %>%
  summarise(Avg = mean(NumTrial), 
            Med = median(NumTrial), 
            Min = min(NumTrial), 
            Max = max(NumTrial)) %>% 
  ungroup %>% kable(digits=3)
Btw Block Avg Med Min Max
1 b1 34.750 32.0 25 59
1 b2 65.250 65.5 54 79
1 b3 75.750 76.5 73 79
1 b4 79.000 79.0 78 80
2 b1 38.000 37.5 25 56
2 b2 65.875 64.0 61 75
2 b3 73.750 75.0 68 79
2 b4 77.250 77.0 74 80


집단 및 블록에 따른 평균 반응시간과 표준편차를 계산하였다. 두 집단 모두에서 블록 진행에 따라 연합 기억 검사의 반응시간이 향상되는 모습을 보였다. 아래의 그래프에서 A는 전체 집단, B는 실험 집단, C는 통제 집단을 나타내며, 빨간 점은 평균, 오차 막대는 95% 참가자 내 신뢰구간을 나타낸다.

# long format
p1.L.rt.long.all <- sp1.all %>% group_by(SN, Btw, Block) %>% 
  summarise(RT = mean(RT)) %>% 
  ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p1.L.rt.long.exp <- p1.L.rt.long.all %>% filter(Btw==1)
p1.L.rt.long.con <- p1.L.rt.long.all %>% filter(Btw==2)

# wide format
p1.L.rt.swide.all <- p1.L.rt.long.all %>% spread(key = Block, value = RT)
p1.L.rt.swide.exp <- p1.L.rt.swide.all %>% filter(Btw==1)
p1.L.rt.swide.con <- p1.L.rt.swide.all %>% filter(Btw==2)

# summary
p1.L.rt.g.all <- p1.L.rt.long.all %>% group_by(Btw, Block) %>%
  summarise(RT.M = mean(RT), SD = sd(RT)) %>% ungroup()
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p1.L.rt.g.all$se <- Rmisc::summarySEwithin(data = p1.L.rt.long.all, measurevar = "RT", 
                                           idvar = "SN", betweenvars = "Btw", withinvars = "Block")$se
p1.L.rt.g.all$ci <- Rmisc::summarySEwithin(data = p1.L.rt.long.all, measurevar = "RT", 
                                           idvar = "SN", betweenvars = "Btw", withinvars = "Block")$ci
p1.L.rt.g.exp <- p1.L.rt.g.all %>% filter(Btw==1)
p1.L.rt.g.con <- p1.L.rt.g.all %>% filter(Btw==2)
p1.L.rt.g.all %>% kable(digits=3)
Btw Block RT.M SD se ci
1 b1 1311.303 200.367 41.333 97.738
1 b2 1041.529 179.786 27.908 65.992
1 b3 889.510 134.172 22.699 53.675
1 b4 815.223 97.048 24.090 56.964
2 b1 1171.468 78.079 24.083 56.947
2 b2 962.199 70.115 11.429 27.026
2 b3 883.690 49.471 16.889 39.937
2 b4 845.969 36.746 8.314 19.660
## plot
p1.rt.all.plot1 <- ggplot(p1.L.rt.g.all, mapping=aes(x=Block, y=RT.M, group=Btw)) + 
  geom_ribbon(p1.L.rt.g.all, mapping=aes(x=Block, ymin=RT.M-ci, ymax=RT.M+ci, fill=Btw), alpha=0.5) + 
  geom_line(p1.L.rt.g.all, mapping=aes(x=Block, y=RT.M, color=Btw), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = Block, ymin=RT.M-ci, ymax=RT.M+ci, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("#feb24c", "#91bfdb"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#feb24c", "#91bfdb")) +
  coord_cartesian(ylim = c(0, 1800), clip = "on") +
  labs(x = "Block", y = "Response Time (ms)", fill="Group") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 1 Association Memory (All Group)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position="top")

p1.rt.exp.plot1 <- ggplot(p1.L.rt.g.exp, mapping=aes(x=Block, y=RT.M, group=1)) + 
  geom_ribbon(aes(ymin=RT.M-ci, ymax=RT.M+ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = Block, ymin=RT.M-ci, ymax=RT.M+ci), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p1.L.rt.long.exp, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=Block, y=RT, group=SN, color=SN)) +
  geom_point(p1.L.rt.long.exp, mapping = aes(x=Block, y=RT, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(0, 1800), clip = "on") +
  labs(x = "Block", y = "Response Time (ms)") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 1 Association Memory (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))

p1.rt.con.plot1 <- ggplot(p1.L.rt.g.con, mapping=aes(x=Block, y=RT.M, group=1)) + 
  geom_ribbon(aes(ymin=RT.M-ci, ymax=RT.M+ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = Block, ymin=RT.M-ci, ymax=RT.M+ci), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p1.L.rt.long.con, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=Block, y=RT, group=SN, color=SN)) +
  geom_point(p1.L.rt.long.con, mapping = aes(x=Block, y=RT, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(0, 1800), clip = "on") +
  labs(x = "Block", y = "Response Time (ms)") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 1 Association Memory (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
ggpubr::ggarrange(p1.rt.all.plot1, p1.rt.exp.plot1, p1.rt.con.plot1, ncol = 3, labels=c("A) All Group", "B) Experimental", "C) Control"))


2.1.1.2.1 혼합 요인 분산 분석


반응시간에 대하여 집단과 블록을 요인으로한 2 X 4 혼합 요인 분산 분석을 수행하였다.

p1.rt.aov <- aov_ez(id = "SN", dv = "RT", data = p1.L.rt.long.all, between = "Btw", within = "Block") 
# test_levene(p1.rt.aov)
# test_sphericity(p1.rt.aov)
anova(p1.rt.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 43406.566 0.869 0.058 0.367
Block 1.893 26.505 7365.099 114.101 0.891 0.000
Btw:Block 1.893 26.505 7365.099 4.990 0.263 0.016

분석 결과, 블록 반복의 주효과와 집단과 블록의 상호작용이 유의하였다.

p1.rt.aov.m1 <- emmeans(p1.rt.aov, pairwise ~ Block | Btw) # adjust="bon"
p1.rt.aov.m1$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
b1 - b2 1 269.774 40.157 14 6.718 0.000
b1 - b3 1 421.793 44.563 14 9.465 0.000
b1 - b4 1 496.080 39.714 14 12.491 0.000
b2 - b3 1 152.020 25.618 14 5.934 0.000
b2 - b4 1 226.306 28.954 14 7.816 0.000
b3 - b4 1 74.287 17.367 14 4.277 0.004
b1 - b2 2 209.269 40.157 14 5.211 0.001
b1 - b3 2 287.777 44.563 14 6.458 0.000
b1 - b4 2 325.499 39.714 14 8.196 0.000
b2 - b3 2 78.509 25.618 14 3.065 0.037
b2 - b4 2 116.231 28.954 14 4.014 0.006
b3 - b4 2 37.722 17.367 14 2.172 0.179
p1.rt.aov.m1 <- emmeans(p1.rt.aov, pairwise ~ Btw | Block) # adjust="bon"
p1.rt.aov.m1$contrasts %>% kable(digits=3)
contrast Block estimate SE df t.ratio p.value
1 - 2 b1 139.835 76.029 14 1.839 0.087
1 - 2 b2 79.330 68.227 14 1.163 0.264
1 - 2 b3 5.819 50.559 14 0.115 0.910
1 - 2 b4 -30.746 36.689 14 -0.838 0.416

사후 분석 결과, 두 집단 모두 반복에 따라 반응속도가 향상되었다. 또한 첫 번째 블록에서 통제 집단은 실험 집단보다 빠른 반응시간을 보였다.


Day 1 연합 기억 검사의 정확도와 반응시간을 집단별로 함께 나타난 그래프는 아래와 같다.

ggpubr::ggarrange(p1.all.plot1, p1.rt.all.plot1, ncol=2, labels = c("A) Accuracy","B) Response Time"))



2.1.2 목록 2 정확도 및 반응시간

p2 <- read.csv("MemUdt_PE_d2t5_p.csv", header = T) 

p2$SN = factor(p2$SN); p2$Btw = factor(p2$Btw)
p2$Block = factor(p2$Block, levels=c(1,2,3,4), labels=c("b1","b2","b3","b4"))
p2$cCue = factor(p2$cCue, levels=c(1,2,3,4), labels=c("c1","c2","c3","c4"))
p2$CueName = factor(p2$CueName, labels=c("c1","c2","c3","c4"))
p2$RT <- p2$RT*1000; p2$Corr <- as.numeric(p2$Corr==1)

glimpse(p2, width=70)
## Rows: 5,120
## Columns: 12
## $ SN      <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ Btw     <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ Trial   <int> 3, 4, 13, 22, 25, 26, 31, 32, 33, 40, 45, 47, 49, 52…
## $ Block   <fct> b1, b1, b1, b1, b1, b1, b1, b1, b1, b1, b1, b1, b1, …
## $ bTrial  <int> 3, 4, 13, 22, 25, 26, 31, 32, 33, 40, 45, 47, 49, 52…
## $ cCue    <fct> c1, c1, c1, c1, c1, c1, c1, c1, c1, c1, c1, c1, c1, …
## $ IMidx   <int> 177, 157, 193, 107, 46, 70, 143, 134, 222, 158, 59, …
## $ IMname  <chr> " man241.jpg", " man208.jpg", " man260.jpg", " man14…
## $ CueName <fct> c2, c2, c2, c2, c2, c2, c2, c2, c2, c2, c2, c2, c2, …
## $ Resp    <int> 1, 3, 1, 2, 1, 1, 1, 4, 1, 3, 1, 1, 2, 1, 4, 1, 1, 1…
## $ RT      <dbl> 853.9, 946.0, 814.9, 1109.3, 844.9, 1657.5, 1295.9, …
## $ Corr    <dbl> 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1…
# 1. SN: participant ID
# 2. Btw: between-participants factor. 1-experimental group, 2-control group
# 3. Trial: 1 ~ 320
# 4. Block: b1 ~ b4
# 5. bTrial: 1 ~ 80
# 6. cCue: association color cue condition. 1-c1, 2-c2, 3-c3, 4-c4
# 7. IMidx: index of stimuli
# 8. IMname: name of stimuli
# 9. CueName: name of color cue
# 10. Resp: association color cue response
# 11. RT: association color cue response time
# 12. Corr: color cue response correctness. 1-correct, 0-incorrect

length(unique(p2$SN))
## [1] 16
length(unique(p2$SN[p2$Btw==1]))
## [1] 8
length(unique(p2$SN[p2$Btw==2]))
## [1] 8
table(p2$SN)
## 
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16 
## 320 320 320 320 320 320 320 320 320 320 320 320 320 320 320 320


2.1.2.1 정확도 (Accuracy)


목록 2의 연합 학습 검사 결과에서 개별 참가자의 정확도 평균과 표준편차를 계산하였다. 첫째 날과 마찬가지로 두 집단 모두 반복 학습에 따라 정확도가 향상되었다. 아래의 그래프에서 A는 전체 집단, B는 실험 집단, C는 통제 집단을 나타내며, 빨간 점은 평균, 오차 막대는 95% 신뢰구간을 나타낸다.

# phase 1, subject-level, long-format
p2.L.long.all <- p2 %>% group_by(SN, Btw, Block) %>% 
  summarise(Accuracy = mean(Corr)*100) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p2.L.long.exp <- p2.L.long.all %>% filter(Btw == 1)
p2.L.long.con <- p2.L.long.all %>% filter(Btw == 2) 

# wide format, needed for geom_segments.
p2.L.swide.all <- p2.L.long.all %>% spread(key = Block, value = Accuracy)
p2.L.swide.exp <- p2.L.swide.all %>% filter(Btw == 1)
p2.L.swide.con <- p2.L.swide.all %>% filter(Btw == 2)

# summary table
p2.L.g.all <- p2.L.long.all %>% group_by(Btw, Block) %>%
  summarise(Acc.M = mean(Accuracy), SD = sd(Accuracy)) %>% ungroup()
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p2.L.g.all$se <- Rmisc::summarySEwithin(data = p2.L.long.all, measurevar = "Accuracy", idvar = "SN", betweenvars ="Btw", withinvars = "Block")$se
p2.L.g.all$ci <- Rmisc::summarySEwithin(data = p2.L.long.all, measurevar = "Accuracy", idvar = "SN", betweenvars ="Btw", withinvars = "Block")$ci
p2.L.g.exp <- p2.L.g.all %>% filter(Btw == 1)
p2.L.g.con <- p2.L.g.all %>% filter(Btw == 2)
p2.L.g.all %>% kable(digits=3)
Btw Block Acc.M SD se ci
1 b1 62.969 12.337 3.475 8.216
1 b2 91.719 5.861 1.336 3.160
1 b3 97.656 2.159 1.596 3.775
1 b4 99.531 0.930 1.703 4.028
2 b1 64.062 13.003 3.206 7.582
2 b2 88.281 8.397 1.395 3.299
2 b3 94.375 4.482 1.394 3.297
2 b4 98.750 1.336 2.253 5.328
## plot
p2.all.plot1 <- ggplot(p2.L.g.all, mapping=aes(x=Block, y=Acc.M, group=Btw)) + 
  geom_ribbon(p2.L.g.all, mapping=aes(x=Block, ymin=Acc.M-ci, ymax=Acc.M+ci, fill=Btw), alpha=0.5) + 
  geom_line(p2.L.g.all, mapping=aes(x=Block, y=Acc.M, color=Btw), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = Block, ymin=Acc.M-ci, ymax=Acc.M+ci, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("#feb24c", "#91bfdb"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#feb24c", "#91bfdb")) +
  coord_cartesian(ylim = c(25, 105), clip = "on") +
  labs(x = "Block", y = "Accuracy (%)", fill="Group") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 2 Association Memory (All Group)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position="top")
p2.exp.plot1 <- ggplot(p2.L.g.exp, mapping=aes(x=Block, y=Acc.M, group=1)) + 
  geom_ribbon(aes(ymin=Acc.M-ci, ymax=Acc.M+ci), fill="darkblue", alpha=0.3) + geom_line(colour="darkblue", size = 1) +
  geom_pointrange(aes(x = Block, ymin=Acc.M-ci, ymax=Acc.M+ci), position = position_dodge(0.65), 
                  color = "darkblue", size = 0.8, show.legend = FALSE) +
  geom_line(p2.L.long.exp, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=Block, y=Accuracy, group=SN, color=SN)) +
  geom_point(p2.L.long.exp, mapping = aes(x=Block, y=Accuracy, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(25, 105), clip = "on") +
  labs(x = "Block", y = "Accuracy (%)") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 2 Association Memory (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
p2.con.plot1 <- ggplot(p2.L.g.con, mapping=aes(x=Block, y=Acc.M, group=1)) + 
  geom_ribbon(aes(ymin=Acc.M-ci, ymax=Acc.M+ci), fill="darkblue", alpha=0.3) + geom_line(colour="darkblue", size = 1) +
  geom_pointrange(aes(x = Block, ymin=Acc.M-ci, ymax=Acc.M+ci), position = position_dodge(0.65), 
                  color = "darkblue", size = 0.8, show.legend = FALSE) +
  geom_line(p2.L.long.con, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=Block, y=Accuracy, group=SN, color=SN)) +
  geom_point(p2.L.long.con, mapping = aes(x=Block, y=Accuracy, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(25, 105), clip = "on") +
  labs(x = "Block", y = "Accuracy (%)") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 2 Association Memory (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))

ggpubr::ggarrange(p2.all.plot1, p2.exp.plot1, p2.con.plot1, ncol=3, labels=c("A) All Group","B) Experimental","C) Control"))


2.1.2.1.1 혼합 요인 분산 분석


목록 2에서 집단과 블록 반복을 요인으로 2 X 4 혼합 요인 분산분석을 수행하였다.

p2.acc.aov <- aov_ez(id = "SN", dv = "Accuracy", data = p2.L.long.all, between = "Btw", within = "Block")
# test_levene(p2.acc.aov)
# test_sphericity(p2.acc.aov)
anova(p2.acc.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 111.101 0.369 0.026 0.553
Block 1.387 19.415 83.408 109.149 0.886 0.000
Btw:Block 1.387 19.415 83.408 0.489 0.034 0.553

분석 결과, 블록 반복의 주효과는 유의하였다.

p2.acc.m1 <- emmeans(p2.acc.aov, pairwise ~ Block | Btw, type = "response") # adjust="bon"
p2.acc.m1$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
b1 - b2 1 -28.750 3.365 14 -8.543 0.000
b1 - b3 1 -34.688 4.141 14 -8.377 0.000
b1 - b4 1 -36.562 4.418 14 -8.276 0.000
b2 - b3 1 -5.938 1.713 14 -3.466 0.018
b2 - b4 1 -7.812 2.407 14 -3.245 0.027
b3 - b4 1 -1.875 1.056 14 -1.775 0.325
b1 - b2 2 -24.219 3.365 14 -7.196 0.000
b1 - b3 2 -30.312 4.141 14 -7.321 0.000
b1 - b4 2 -34.688 4.418 14 -7.852 0.000
b2 - b3 2 -6.094 1.713 14 -3.557 0.015
b2 - b4 2 -10.469 2.407 14 -4.349 0.003
b3 - b4 2 -4.375 1.056 14 -4.141 0.005

각 집단에서 블록 반복을 대상으로 한 사후분석을 수행하였다. 분석 결과, 두 집단 모두에서 블록 반복에 따른 정확도 향상이 관찰되었다.



2.1.2.2 반응시간 (Response Time)


목록 2 연합 기억 검사의 반응시간을 분석하였다.

p2.acc.trial <- p2 %>% group_by(SN) %>% 
  summarise(Accuracy = mean(Corr)*100) %>% 
  ungroup() %>% summarise(M = mean(Accuracy), SD = sd(Accuracy))

cp2.all <- p2 %>% filter(Corr==1)

sp2.all <- cp2.all %>% filter(RT > 150) %>% 
  group_by(SN) %>% 
  nest() %>% 
  mutate(lbound = map(data, ~mean(.$RT)-3*sd(.$RT)),
         ubound = map(data, ~mean(.$RT)+3*sd(.$RT))) %>% 
  unnest(c(lbound, ubound)) %>% 
  unnest(data) %>% 
  ungroup() %>% 
  mutate(Outlier = (RT < lbound)|(RT > ubound)) %>% 
  filter(Outlier == FALSE) %>% 
  select(SN, Btw, Block, cCue, CueName, Resp, RT, Corr, IMname)

100 - 100*nrow(sp2.all)/nrow(cp2.all)
## [1] 2.151019
## [1] 2.15

연합 기억 검사에서 정확하게 반응한 시행(M = 87.17%, SD = 5.16%)의 반응 시간 자료만 분석하였다. 가외치(Outliers)를 제거하기 위하여 반응 시간이 150ms 보다 빠르거나, 각 참가자의 반응시간 분포에서 평균으로부터 3 표준편차를 벗어난 시행을 제거하였다. 가외치 제거 결과, 정확반응 시행의 반응시간 자료에서 2.15%가 제거되었다.

sp2.all %>% group_by(SN, Btw, Block) %>% 
  summarise(NumTrial = length(RT)) %>% 
  ungroup %>% 
  group_by(Btw, Block) %>%
  summarise(Avg = mean(NumTrial), 
            Med = median(NumTrial), 
            Min = min(NumTrial), 
            Max = max(NumTrial)) %>% 
  ungroup %>% kable(digits=3)
Btw Block Avg Med Min Max
1 b1 46.250 43.5 38 61
1 b2 71.875 71.0 64 80
1 b3 77.375 78.0 75 79
1 b4 79.500 80.0 78 80
2 b1 48.625 45.0 38 66
2 b2 68.750 68.0 58 79
2 b3 75.000 75.5 68 78
2 b4 78.500 79.0 76 80


각 참가자의 집단 및 블록에 따른 평균 반응시간과 표준편차를 계산하였다. 두 집단 모두에서 블록 진행에 따라 연합 기억 검사의 반응시간이 향상되는 모습을 보였다. 아래의 그래프에서 A는 전체 집단, B는 실험 집단, C는 통제 집단을 나타내며, 빨간 점은 평균, 오차 막대는 95% 참가자 내 신뢰구간을 나타낸다.

# long format
p2.L.rt.long.all <- sp2.all %>% group_by(SN, Btw, Block) %>% 
  summarise(RT = mean(RT)) %>% 
  ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p2.L.rt.long.exp <- p2.L.rt.long.all %>% filter(Btw==1)
p2.L.rt.long.con <- p2.L.rt.long.all %>% filter(Btw==2)

# wide format
p2.L.rt.swide.all <- p2.L.rt.long.all %>% spread(key = Block, value = RT)
p2.L.rt.swide.exp <- p2.L.rt.swide.all %>% filter(Btw==1)
p2.L.rt.swide.con <- p2.L.rt.swide.all %>% filter(Btw==2)


# summary
p2.L.rt.g.all <- p2.L.rt.long.all %>% group_by(Btw, Block) %>%
  summarise(RT.M = mean(RT), SD = sd(RT)) %>% ungroup()
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p2.L.rt.g.all$se <- Rmisc::summarySEwithin(data = p2.L.rt.long.all, measurevar = "RT", 
                                           idvar = "SN", betweenvars = "Btw", withinvars = "Block")$se
p2.L.rt.g.all$ci <- Rmisc::summarySEwithin(data = p2.L.rt.long.all, measurevar = "RT", 
                                           idvar = "SN", betweenvars = "Btw", withinvars = "Block")$ci
p2.L.rt.g.exp <- p2.L.rt.g.all %>% filter(Btw==1)
p2.L.rt.g.con <- p2.L.rt.g.all %>% filter(Btw==2)
p2.L.rt.g.all %>% kable(digits=3)
Btw Block RT.M SD se ci
1 b1 1134.721 129.357 22.519 53.249
1 b2 932.799 112.540 22.052 52.145
1 b3 821.952 76.985 19.186 45.369
1 b4 787.461 72.798 25.462 60.207
2 b1 1115.484 142.017 25.171 59.519
2 b2 959.215 77.685 6.530 15.441
2 b3 871.059 70.580 18.020 42.611
2 b4 822.706 67.736 12.968 30.665
## plot
p2.rt.all.plot1 <- ggplot(p2.L.rt.g.all, mapping=aes(x=Block, y=RT.M, group=Btw)) + 
  geom_ribbon(p2.L.rt.g.all, mapping=aes(x=Block, ymin=RT.M-ci, ymax=RT.M+ci, fill=Btw), alpha=0.5) + 
  geom_line(p2.L.rt.g.all, mapping=aes(x=Block, y=RT.M, color=Btw), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = Block, ymin=RT.M-ci, ymax=RT.M+ci, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("#feb24c", "#91bfdb"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#feb24c", "#91bfdb")) +
  coord_cartesian(ylim = c(0, 1800), clip = "on") +
  labs(x = "Block", y = "Response Time (ms)", fill="Group") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 2 Association Memory (All Group)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position="top")
p2.rt.exp.plot1 <- ggplot(p2.L.rt.g.exp, mapping=aes(x=Block, y=RT.M, group=1)) + 
  geom_ribbon(aes(ymin=RT.M-ci, ymax=RT.M+ci), fill="darkblue", alpha=0.3) + geom_line(colour="darkblue", size = 1) +
  geom_pointrange(aes(x = Block, ymin=RT.M-ci, ymax=RT.M+ci), position = position_dodge(0.65), 
                  color = "darkblue", size = 0.8, show.legend = FALSE) +
  geom_line(p2.L.rt.long.exp, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=Block, y=RT, group=SN, color=SN)) +
  geom_point(p2.L.rt.long.exp, mapping = aes(x=Block, y=RT, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(0, 1800), clip = "on") +
  labs(x = "Block", y = "Response Time (ms)") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 2 Association Memory (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))

p2.rt.con.plot1 <- ggplot(p2.L.rt.g.con, mapping=aes(x=Block, y=RT.M, group=1)) + 
  geom_ribbon(aes(ymin=RT.M-ci, ymax=RT.M+ci), fill="darkblue", alpha=0.3) + geom_line(colour="darkblue", size = 1) +
  geom_pointrange(aes(x = Block, ymin=RT.M-ci, ymax=RT.M+ci), position = position_dodge(0.65), 
                  color = "darkblue", size = 0.8, show.legend = FALSE) +
  geom_line(p2.L.rt.long.con, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=Block, y=RT, group=SN, color=SN)) +
  geom_point(p2.L.rt.long.con, mapping = aes(x=Block, y=RT, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(0, 1800), clip = "on") +
  labs(x = "Block", y = "Response Time (ms)") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 2 Association Memory (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
ggpubr::ggarrange(p2.rt.all.plot1, p2.rt.exp.plot1, p2.rt.con.plot1, ncol = 3, labels=c("A) All Group","B) Experimental","C) Control"))


2.1.2.2.1 혼합 요인 분산 분석 1


집단과 블록 진행을 요인으로 한 2 X 4 혼합 요인 분산분석을 수행하였다.

p2.rt.aov <- aov_ez(id = "SN", dv = "RT", data = p2.L.rt.long.all, between = "Btw", within = "Block")
# test_levene(p2.rt.aov)
# test_sphericity(p2.rt.aov)
anova(p2.rt.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 28662.420 0.292 0.020 0.597
Block 2.283 31.967 4176.658 102.165 0.879 0.000
Btw:Block 2.283 31.967 4176.658 1.102 0.073 0.351

분석 결과, 블록 진행의 주효과는 유의하였다.

p2.rt.aov.m1 <- emmeans(p2.rt.aov, pairwise ~ Block | Btw)
p2.rt.aov.m1$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
b1 - b2 1 201.922 25.418 14 7.944 0.000
b1 - b3 1 312.769 34.608 14 9.037 0.000
b1 - b4 1 347.260 32.547 14 10.670 0.000
b2 - b3 1 110.847 22.534 14 4.919 0.001
b2 - b4 1 145.338 28.838 14 5.040 0.001
b3 - b4 1 34.491 22.931 14 1.504 0.461
b1 - b2 2 156.269 25.418 14 6.148 0.000
b1 - b3 2 244.425 34.608 14 7.063 0.000
b1 - b4 2 292.778 32.547 14 8.996 0.000
b2 - b3 2 88.156 22.534 14 3.912 0.008
b2 - b4 2 136.509 28.838 14 4.734 0.002
b3 - b4 2 48.353 22.931 14 2.109 0.198

각 집단별로 블록 반복에 의한 사후분석을 수행하였다. 두 집단 모두에서 네 번째 블록은 첫 번째 블록보다 유의하게 빠른 반응시간을 보였다.


둘째 날 학습한 목록 2의 연합 기억 검사의 정확도와 반응시간을 집단별로 함께 나타난 그래프는 아래와 같다.

ggpubr::ggarrange(p2.all.plot1, p2.rt.all.plot1, ncol=2, labels = c("A) Accuracy","B) Response Time"))



2.1.3 Day 1 & Day 2 연합 기억 비교

p1$day <- 1; p2$day <- 2; p12 <- rbind(p1, p2)
p12$day = factor(p12$day, levels = c(1,2), labels=c("day1", "day2"))
p12.exp <- p12 %>% filter(Btw == 1)
p12.con <- p12 %>% filter(Btw == 2)

sp1.all$day <- 1; sp2.all$day <- 2; sp12.all <- rbind(sp1.all, sp2.all)
sp12.all$day = factor(sp12.all$day, levels = c(1,2), labels=c("day1", "day2"))
sp12.exp <- sp12.all %>% filter(Btw == 1)
sp12.con <- sp12.all %>% filter(Btw == 2)


2.1.3.1 정확도 (Accuracy)


각 집단에서 첫째 날 학습한 목록 1과 둘째 날 학습한 목록 2의 연합 학습 검사 정확도를 비교하였다. 개별 참가자의 정확도 평균과 표준편차를 집단과 물체 목록에 따라 계산하여 그래프로 표시하였다. 두 집단 모두, 각 물체 목록에서 반복 학습에 따라 정확도가 향상되었으나 첫 번째, 두 번째 블록에서 둘째 날의 정확도가 첫째 날보다 우수한 패턴이 나타났다. 그러나 이러한 차이는 네 번째 블록으로 갈수록 사라졌다. 아래의 그래프에서 A는 실험 집단, B는 통제집단을 나타내며, 빨간 점과 파란 점은 평균, 오차 막대는 95% 신뢰구간을 나타낸다.

# phase 1, subject-level, long-format
p12.L.long.all <- p12 %>% group_by(SN, Btw, day, Block) %>% 
  summarise(Accuracy = mean(Corr)*100) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'Btw', 'day'. You can override using the `.groups` argument.
p12.L.long.exp <- p12.L.long.all %>% filter(Btw == 1)
p12.L.long.con <- p12.L.long.all %>% filter(Btw == 2) 

# summary table
p12.L.g.all <- p12.L.long.all %>% group_by(Btw, day, Block) %>%
  summarise(ACC.M = mean(Accuracy), SD = sd(Accuracy)) %>% ungroup()
## `summarise()` has grouped output by 'Btw', 'day'. You can override using the `.groups` argument.
p12.L.g.all$se <- Rmisc::summarySEwithin(data = p12.L.long.all, measurevar = "Accuracy", 
                                         idvar = "SN", betweenvars ="Btw", withinvars = c("day", "Block"))$se
p12.L.g.all$ci <- Rmisc::summarySEwithin(data = p12.L.long.all, measurevar = "Accuracy", 
                                         idvar = "SN", betweenvars ="Btw", withinvars = c("day", "Block"))$ci
p12.L.g.exp <- p12.L.g.all %>% filter(Btw == 1)
p12.L.g.con <- p12.L.g.all %>% filter(Btw == 2)
# p12.L.g.all %>% kable(digits=3)

## plot
p12.exp.plot1 <- ggplot(p12.L.g.exp, mapping=aes(x=Block, y=ACC.M, group=day)) + 
  geom_ribbon(p12.L.g.exp, mapping=aes(x=Block, ymin=ACC.M-ci, ymax=ACC.M+ci, fill=day), alpha=0.3) + 
  geom_line(p12.L.g.exp, mapping=aes(x=Block, y=ACC.M, color=day), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = Block, ymin=ACC.M-ci, ymax=ACC.M+ci, color=day), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("darkred", "darkblue"), labels = c("List 1", "List 2")) +
  scale_color_manual(values = c("darkred", "darkblue")) +
  coord_cartesian(ylim = c(0, 105), clip = "on") +
  labs(x = "Block", y = "Accuracy (%)", fill="Object List") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 1 & 2 Association Memory (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position="top")

p12.con.plot1 <- ggplot(p12.L.g.con, mapping=aes(x=Block, y=ACC.M, group=day)) + 
  geom_ribbon(p12.L.g.con, mapping=aes(x=Block, ymin=ACC.M-ci, ymax=ACC.M+ci, fill=day), alpha=0.3) + 
  geom_line(p12.L.g.con, mapping=aes(x=Block, y=ACC.M, color=day), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = Block, ymin=ACC.M-ci, ymax=ACC.M+ci, color=day), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("darkred", "darkblue"), labels = c("List 1", "List 2")) +
  scale_color_manual(values = c("darkred", "darkblue")) +
  coord_cartesian(ylim = c(0, 105), clip = "on") +
  labs(x = "Block", y = "Accuracy (%)", fill="Object List") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 1 & 2 Association Memory (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position="top")
ggpubr::ggarrange(p12.exp.plot1, p12.con.plot1, ncol=2, labels = c("A) Experimental","B) Control"))


2.1.3.1.1 혼합 요인 분산 분석 1


집단과 목록, 블록을 요인으로 한 2 X 2 X 4 혼합 요인 분산 분석을 수행하였다.

# all group
p12.acc.all.aov <- aov_ez(id = "SN", dv = "Accuracy", data = p12.L.long.all, between = "Btw", within = c("day" , "Block"))
# test_levene(p12.acc.all.aov)
# test_sphericity(p12.acc.all.aov)
anova(p12.acc.all.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 245.075 0.039 0.003 0.846
day 1.000 14.000 40.395 29.041 0.675 0.000
Btw:day 1.000 14.000 40.395 0.881 0.059 0.364
Block 1.246 17.438 169.491 166.334 0.922 0.000
Btw:Block 1.246 17.438 169.491 0.670 0.046 0.456
day:Block 1.809 25.331 33.267 13.968 0.499 0.000
Btw:day:Block 1.809 25.331 33.267 0.522 0.036 0.582

분석 결과, 물체 목록의 주효과, 블록의 주효과, 물체 목록과 블록의 상호작용이 유의하였다.

## all group
p12.acc.all.m1 <- emmeans(p12.acc.all.aov, pairwise ~ Block | day, type = "response")
p12.acc.all.m1$contrasts %>% kable(digits=3)
contrast day estimate SE df t.ratio p.value
b1 - b2 day1 -33.828 2.515 14 -13.450 0.000
b1 - b3 day1 -44.688 3.274 14 -13.648 0.000
b1 - b4 day1 -48.438 3.765 14 -12.866 0.000
b2 - b3 day1 -10.859 1.696 14 -6.403 0.000
b2 - b4 day1 -14.609 2.071 14 -7.054 0.000
b3 - b4 day1 -3.750 0.723 14 -5.185 0.001
b1 - b2 day2 -26.484 2.380 14 -11.129 0.000
b1 - b3 day2 -32.500 2.928 14 -11.100 0.000
b1 - b4 day2 -35.625 3.124 14 -11.404 0.000
b2 - b3 day2 -6.016 1.211 14 -4.966 0.001
b2 - b4 day2 -9.141 1.702 14 -5.370 0.001
b3 - b4 day2 -3.125 0.747 14 -4.183 0.005
p12.acc.all.m2 <- emmeans(p12.acc.all.aov, pairwise ~ day | Block, type = "response")
p12.acc.all.m2$contrasts %>% kable(digits=3)
contrast Block estimate SE df t.ratio p.value
day1 - day2 b1 -14.141 2.840 14 -4.979 0.000
day1 - day2 b2 -6.797 1.939 14 -3.506 0.003
day1 - day2 b3 -1.953 0.763 14 -2.561 0.023
day1 - day2 b4 -1.328 0.408 14 -3.254 0.006

목록에서의 블록 차이를 사후 분석한 결과, 두 물체 목록 모두에서 네 번째 블록은 첫 번째 블록보다 유의하게 높은 정확도를 보였다, 목록 1&2, p < .001. 블록에서 물체 목록 간 차이를 사후 분석한 결과, 블록 1과 2에서 목록 2의 정확도가 목록 1보다 유의하게 높았다. 그러나 이러한 차이는 블록 3과 4에서 나타나지 않았다.


2.1.3.1.2 혼합 요인 분산 분석 2


마지막 블록에서 집단과 목록을 요인으로 한 2 X 2 혼합 요인 분산 분석을 수행하였다.

p12.L.long.all.b4 <- p12.L.long.all %>% filter(Block=="b4")

# all group
p12.acc.all.b4.aov <- aov_ez(id = "SN", dv = "Accuracy", data = p12.L.long.all.b4, between = "Btw", within = c("day"))
# test_levene(p12.acc.all.aov)
# test_sphericity(p12.acc.all.aov)
anova(p12.acc.all.b4.aov , es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1 14 4.457 3.166 0.184 0.097
day 1 14 1.332 10.592 0.431 0.006
Btw:day 1 14 1.332 1.796 0.114 0.202

분석 결과, 물체 목록의 주효과가 유의하였다.

## all group
p12.acc.all.b4.m1 <- emmeans(p12.acc.all.b4.aov , pairwise ~ day | Btw, type = "response")
p12.acc.all.b4.m1$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
day1 - day2 1 -0.781 0.577 14 -1.354 0.197
day1 - day2 2 -1.875 0.577 14 -3.249 0.006
p12.acc.all.b4.m2 <- emmeans(p12.acc.all.b4.aov, pairwise ~ Btw | day, type = "response")
p12.acc.all.b4.m2$contrasts %>% kable(digits=3)
contrast day estimate SE df t.ratio p.value
1 - 2 day1 1.875 1.056 14 1.775 0.098
1 - 2 day2 0.781 0.576 14 1.357 0.196

집단에서 목록에 따른 정확도를 사후 분석한 결과, 통제 집단에서 목록 2는 목록 1보다 유의하게 높은 정확도를 보였다. 실험 집단에서의 차이는 유의하지 않았다. 추가로, 목록에서 집단에 따른 차이를 분석한 결과, 목록 1에서 실험 집단은 통제 집단보다 유의하게 높은 정확도를 보였다.


2.1.3.2 반응시간 (Response Time)


두 집단에서 목록, 블록에 따른 연합 학습 검사 반응시간을 비교하였다. 반응시간 자료는 각 물체 목록 별로 전처리된 자료를 사용하였다. 개별 참가자의 반응시간 평균과 표준편차를 집단과 물체 목록에 따라 계산하여 그래프로 표시하였다. 두 집단 모두, 각 물체 목록에서 블록 반복에 따라 반응시간이 빨라졌다. 아래의 그래프에서 A는 실험 집단, B는 통제집단을 나타내며, 빨간 점과 파란 점은 평균, 오차 막대는 95% 신뢰구간을 나타낸다.

# long format
p12.L.rt.long.all <- sp12.all %>% group_by(SN, Btw, day, Block) %>% 
  summarise(RT = mean(RT)) %>% 
  ungroup()
## `summarise()` has grouped output by 'SN', 'Btw', 'day'. You can override using the `.groups` argument.
p12.L.rt.long.exp <- p12.L.rt.long.all %>% filter(Btw==1)
p12.L.rt.long.con <- p12.L.rt.long.all %>% filter(Btw==2)

# summary
p12.L.rt.g.all <- p12.L.rt.long.all %>% group_by(Btw, day, Block) %>%
  summarise(RT.M = mean(RT), SD = sd(RT)) %>% ungroup()
## `summarise()` has grouped output by 'Btw', 'day'. You can override using the `.groups` argument.
p12.L.rt.g.all$se <- Rmisc::summarySEwithin(data = p12.L.rt.long.all, measurevar = "RT", 
                                            idvar = "SN", betweenvars = "Btw", withinvars = c("day", "Block"))$se
p12.L.rt.g.all$ci <- Rmisc::summarySEwithin(data = p12.L.rt.long.all, measurevar = "RT", 
                                            idvar = "SN", betweenvars = "Btw", withinvars = c("day", "Block"))$ci
p12.L.rt.g.exp <- p12.L.rt.g.all %>% filter(Btw==1)
p12.L.rt.g.con <- p12.L.rt.g.all %>% filter(Btw==2)
# p12.L.rt.g.all %>% kable(digits=3)

## plot 
p12.rt.exp.plot1 <- ggplot(p12.L.rt.g.exp, mapping=aes(x=Block, y=RT.M, group=day)) + 
  geom_ribbon(p12.L.rt.g.exp, mapping=aes(x=Block, ymin=RT.M-ci, ymax=RT.M+ci, fill=day), alpha=0.3) + 
  geom_line(p12.L.rt.g.exp, mapping=aes(x=Block, y=RT.M, color=day), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = Block, ymin=RT.M-ci, ymax=RT.M+ci, color=day), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("darkred", "darkblue"), labels = c("List 1", "List 2")) +
  scale_color_manual(values = c("darkred", "darkblue")) +
  coord_cartesian(ylim = c(0, 1800), clip = "on") +
  labs(x = "Block", y = "Response Time (ms)", fill="Object List") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 1 & 2 Association Memory (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position="top")
p12.rt.con.plot1 <- ggplot(p12.L.rt.g.con, mapping=aes(x=Block, y=RT.M, group=day)) + 
  geom_ribbon(p12.L.rt.g.con, mapping=aes(x=Block, ymin=RT.M-ci, ymax=RT.M+ci, fill=day), alpha=0.3) + 
  geom_line(p12.L.rt.g.con, mapping=aes(x=Block, y=RT.M, color=day), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = Block, ymin=RT.M-ci, ymax=RT.M+ci, color=day), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("darkred", "darkblue"), labels = c("List 1", "List 2")) +
  scale_color_manual(values = c("darkred", "darkblue")) +
  coord_cartesian(ylim = c(0, 1800), clip = "on") +
  labs(x = "Block", y = "Response Time (ms)", fill="Object List") +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  # ggtitle("Day 1 & 2 Association Memory (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position="top")
ggpubr::ggarrange(p12.rt.exp.plot1, p12.rt.con.plot1, ncol=2, labels=c("A) Experimental","B) Control"))


2.1.3.2.1 혼합 요인 분산 분석 1


반응시간에 대하여, 집단, 목록, 블록의 요인으로 2 X 2 X 4 혼합 요인 분산 분석을 수행하였다.

# all group
p12.rt.all.aov <- aov_ez(id = "SN", dv = "RT", data = p12.L.rt.long.all, between = "Btw", within = c("day" , "Block"))
anova(p12.rt.all.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 59243.439 0.089 0.006 0.770
day 1.000 14.000 12825.548 8.814 0.386 0.010
Btw:day 1.000 14.000 12825.548 3.184 0.185 0.096
Block 1.806 25.290 8419.494 166.160 0.922 0.000
Btw:Block 1.806 25.290 8419.494 4.168 0.229 0.031
day:Block 2.187 30.614 3782.489 4.613 0.248 0.015
Btw:day:Block 2.187 30.614 3782.489 2.018 0.126 0.147

분석 결과, 목록과 블록의 주효과, 목록과 블록 간의 상호작용, 집단과 블록의 상호작용이 유의하였다.

## all group
p12.rt.all.m1 <- emmeans(p12.rt.all.aov, pairwise ~ Block | day)
p12.rt.all.m1$contrasts %>% kable(digits=3)
contrast day estimate SE df t.ratio p.value
b1 - b2 day1 239.521 28.395 14 8.435 0.000
b1 - b3 day1 354.785 31.510 14 11.259 0.000
b1 - b4 day1 410.790 28.082 14 14.628 0.000
b2 - b3 day1 115.264 18.115 14 6.363 0.000
b2 - b4 day1 171.269 20.474 14 8.365 0.000
b3 - b4 day1 56.004 12.281 14 4.560 0.002
b1 - b2 day2 179.096 17.973 14 9.965 0.000
b1 - b3 day2 278.597 24.472 14 11.384 0.000
b1 - b4 day2 320.019 23.014 14 13.905 0.000
b2 - b3 day2 99.501 15.934 14 6.245 0.000
b2 - b4 day2 140.923 20.392 14 6.911 0.000
b3 - b4 day2 41.422 16.215 14 2.555 0.094
p12.rt.all.m2 <- emmeans(p12.rt.all.aov, pairwise ~ day | Block)
p12.rt.all.m2$contrasts %>% kable(digits=3)
contrast Block estimate SE df t.ratio p.value
day1 - day2 b1 116.283 30.041 14 3.871 0.002
day1 - day2 b2 55.857 29.100 14 1.919 0.076
day1 - day2 b3 40.095 26.960 14 1.487 0.159
day1 - day2 b4 25.512 12.688 14 2.011 0.064
p12.rt.all.m3 <- emmeans(p12.rt.all.aov, pairwise ~ Block | Btw)
p12.rt.all.m3$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
b1 - b2 1 235.848 27.986 14 8.427 0.000
b1 - b3 1 367.281 32.071 14 11.452 0.000
b1 - b4 1 421.670 31.090 14 13.563 0.000
b2 - b3 1 131.433 21.146 14 6.215 0.000
b2 - b4 1 185.822 22.596 14 8.224 0.000
b3 - b4 1 54.389 8.136 14 6.685 0.000
b1 - b2 2 182.769 27.986 14 6.531 0.000
b1 - b3 2 266.101 32.071 14 8.297 0.000
b1 - b4 2 309.139 31.090 14 9.943 0.000
b2 - b3 2 83.332 21.146 14 3.941 0.007
b2 - b4 2 126.370 22.596 14 5.593 0.000
b3 - b4 2 43.037 8.136 14 5.290 0.001

목록에서의 블록 차이 분석 결과, 두 목록 모두 네 번째 블록은 첫 번째 블록보다 유의하게 빠른 반응시간을 보였다. 블록에서 물체 목록 간 차이를 분석한 결과, 블록 1과 2에서 목록 2의 반응시간이 더 빠르게 나타났다. 그러나 블록 3과 4에서는 이러한 차이가 나타나지 않았다. 각 집단에서 블록에 의한 차이를 분석한 결과, 두 집단 모두 네 번째 블록은 첫 번째 블록보다 유의하게 빠른 반응시간을 보였다.


2.1.3.2.2 혼합 요인 분산 분석 2


반응시간에 대하여, 네 번째 블록의 집단, 목록을 요인으로 2 X 2 혼합 요인 분산 분석을 수행하였다.

# all group
p12.L.rt.long.b4.all <- p12.L.rt.long.all %>% filter(Block=="b4")
p12.rt.all.b4.aov <- aov_ez(id = "SN", dv = "RT", data = p12.L.rt.long.b4.all, between = "Btw", within = c("day"))
anova(p12.rt.all.b4.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1 14 9040.206 0.963 0.064 0.343
day 1 14 1287.946 4.043 0.224 0.064
Btw:day 1 14 1287.946 0.031 0.002 0.862

분석 결과, 모든 효과가 유의하지 않았다.

## all group
p12.rt.all.b4.m1 <- emmeans(p12.rt.all.b4.aov, pairwise ~ day | Btw)
p12.rt.all.b4.m1$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
day1 - day2 1 27.762 17.944 14 1.547 0.144
day1 - day2 2 23.262 17.944 14 1.296 0.216
p12.rt.all.b4.m2 <- emmeans(p12.rt.all.b4.aov, pairwise ~ Btw | day)
p12.rt.all.b4.m2$contrasts %>% kable(digits=3)
contrast day estimate SE df t.ratio p.value
1 - 2 day1 -30.746 36.689 14 -0.838 0.416
1 - 2 day2 -35.246 35.156 14 -1.003 0.333


정확도와 반응시간을 함께 나타낸 그래프는 아래와 같다.

ggpubr::ggarrange(p12.exp.plot1, p12.con.plot1, p12.rt.exp.plot1, p12.rt.con.plot1, nrow = 2, ncol=2, 
          labels=c("A) Experimental - Acc","B) Control - Acc","C) Experimental - RT","D) Control - RT"))

2.1.4 색 단서에 의한 학습 차이


본 실험에서는 참가자 내에서 예측 오류의 정도를 조작하기 위하여 물체-색 연합 기억을 사용하였다. 네 가지 색은 주황색[c1; 237, 125, 39], 노란색[c2; 255, 192, 0], 파란색[c3; 90, 155, 213], 초록색[c4; 112, 173, 70]으로 설정되었다. 색에 따라 기억 수행 정도에서 큰 차이가 난다면, 이 차이가 마지막 날 출처 기억 및 연합 기억 검사에 혼입될 가능성이 있다. 따라서 색에 따라 연합 기억 수행이 차이가 있는지 살펴보았다 .


p12.acc.cue.all <- p12  %>% group_by(SN, cCue) %>% 
  summarise(Accuracy = mean(Corr)*100, SD = sd(Corr)*100) %>% 
  ungroup()
# p12.acc.cue.all %>% kable()

p12.acc.cue.all.wide <- p12.acc.cue.all %>% 
  select(SN, cCue, Accuracy) %>% 
  spread(cCue, Accuracy)
# p12.acc.cue.all.wide %>% kable(digits=0)

p12.acc.cue.all.g <- p12.acc.cue.all %>% group_by(cCue) %>% 
  summarise(Acc.m = mean(Accuracy), Acc.sd = sd(Accuracy)) %>% 
  ungroup()
p12.acc.cue.all.g$Acc.ci <- Rmisc::summarySEwithin(data = p12.acc.cue.all, measurevar = "Accuracy", idvar = "SN", withinvars = "cCue")$ci
p12.acc.cue.all.g$Acc.se <- Rmisc::summarySEwithin(data = p12.acc.cue.all, measurevar = "Accuracy", idvar = "SN", withinvars = "cCue")$se
p12.acc.cue.all.g %>% kable(digits=3)
cCue Acc.m Acc.sd Acc.ci Acc.se
c1 81.055 6.992 2.249 1.055
c2 83.633 6.496 2.099 0.985
c3 87.109 6.033 2.308 1.083
c4 84.766 5.942 1.850 0.868
p12.acc.cue.plot1 <- ggplot(data=p12.acc.cue.all, aes(x=cCue, y=Accuracy)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .7, 
               width = .65, colour="black", fill=c("#ed7d31", "#ffc000", "#5b9ad5", "#70ad47"), size = 1.02) +
  geom_pointrange(data=p12.acc.cue.all.g, aes(x = cCue, y = Acc.m, ymin = Acc.m-Acc.ci, ymax = Acc.m+Acc.ci),
                  position = position_dodge(0.65), color = "darkred", size = 1, show.legend = FALSE) +
  scale_x_discrete(labels = c("C1", "C2", "C3", "C4")) +
  coord_cartesian(ylim = c(0, 105), clip = "on") +
  labs(x = "Color Condition", y = "Accuracy (%)") +
  # ggtitle("Association Memory Performance") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        legend.position="top")
ggpubr::ggarrange(p12.acc.cue.plot1, labels = c("Association Memory Performance by Color"))

색 조건을 요인으로 하는 분산분석을 수행하였다.

p12.acc.cue.m1 <- aov_ez(id = "SN", dv = "Accuracy", data=p12.acc.cue.all, within = c("cCue"))
anova(p12.acc.cue.m1, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
cCue 2.62 39.297 18.363 6.314 0.296 0.002

분석 결과, 색의 주효과가 유의하였다.

p12.acc.cue.m1.ph <- emmeans(p12.acc.cue.m1, pairwise ~ cCue, type = "response")
p12.acc.cue.m1.ph$contrasts %>% kable(digits=3)
contrast estimate SE df t.ratio p.value
c1 - c2 -2.578 1.558 15 -1.655 0.380
c1 - c3 -6.055 1.604 15 -3.774 0.009
c1 - c4 -3.711 1.160 15 -3.199 0.027
c2 - c3 -3.477 1.326 15 -2.622 0.081
c2 - c4 -1.133 1.315 15 -0.861 0.824
c3 - c4 2.344 1.481 15 1.583 0.417

사후 분석 결과, 주황색(c1)의 정확도는 파란색(c3)보다 유의하게 낮았다. 또한 주황색(c1)은 초록색(c4)보다 낮은 정확도를 보이는 경향이 나타났다. 다른 색 간의 차이는 유의하지 않았다.




2.2 Day 3 출처 기억 및 연합 기억 검사


## load data
p3 <- read.csv("MemUdt_PE_d3t6_p.csv", header = T) 
p3$SN = factor(p3$SN); p3$Btw = factor(p3$Btw)
p3$cSrc = factor(p3$cSrc, levels=c(1,2,3),  labels=c("List_1","List_2","List_3"))
p3$cCue = factor(p3$cCue, levels=c(1,2,3,4,0), labels=c("cc1","cc2","cc3","cc4","cc0"))
p3$cPE = factor(p3$cPE, levels=c(1,2,3,4,0), labels=c("pe1","pe2","pe3","pe4","pe0"))
p3$CueName = factor(p3$CueName, labels=c("c0","c1","c2","c3","c4"))
p3$Resp <- factor(p3$Resp, levels=c(1,2,3), labels=c("Day_1", "Day_2", "New"))
p3$RT <- p3$RT*1000; p3$Correct <- as.numeric(p3$Corr==1)
p3$Int <- as.numeric(p3$Corr==3); p3$Err <- as.numeric(p3$Corr==2)
p3$Incorr <- as.numeric(p3$Corr==0); p3$aCorr <- as.numeric(p3$aCorr==1); 
p3 <- p3 %>% select(SN, Btw, Trial, cSrc, cCue, cPE, IMname, Resp, Corr, Conf, 
                    aResp, aRT, aCorr, aConf, Correct, Int, Err, Incorr)

glimpse(p3, width = 60)
## Rows: 3,840
## Columns: 18
## $ SN      <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Btw     <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ Trial   <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,…
## $ cSrc    <fct> List_2, List_3, List_2, List_3, List_1, Li…
## $ cCue    <fct> cc4, cc0, cc1, cc0, cc2, cc3, cc3, cc2, cc…
## $ cPE     <fct> pe4, pe0, pe1, pe0, pe3, pe2, pe2, pe3, pe…
## $ IMname  <chr> " man312.jpg", " man267.jpg", " man283.jpg…
## $ Resp    <fct> Day_2, New, Day_2, New, Day_1, Day_2, Day_…
## $ Corr    <int> 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, …
## $ Conf    <int> 2, 4, 2, 4, 3, 3, 3, 3, 4, 4, 3, 2, 2, 4, …
## $ aResp   <int> 2, 7, 3, 7, 1, 4, 4, 1, 7, 7, 7, 4, 2, 7, …
## $ aRT     <dbl> 1.3755, 0.0000, 2.0159, 0.0000, 1.4385, 3.…
## $ aCorr   <dbl> 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, …
## $ aConf   <int> 4, 7, 3, 7, 4, 4, 4, 3, 7, 7, 7, 2, 3, 7, …
## $ Correct <dbl> 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, …
## $ Int     <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, …
## $ Err     <dbl> 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, …
## $ Incorr  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
# 1. SN: participant ID
# 2. Btw: between-participants factor. 1-experimental group, 2-control group
# 3. Trial: 1 ~ 360
# 4. cSrc: learning source of stimuli. List_1 - day1, List_2 - day2, New - lure
# 5. cCue: association color cue condition. cc1 - color 1, cc2 - color 2, cc3 - color 3, cc4 = color 4, cc0 - lure
# 6. cPE: prediction error condition. pe1 - 0%, pe2 - 30%, pe3 - 70%, pe4 - 100%, pe0 - no pe/lure
# 7. IMname: name of stimuli
# 8. Resp: source response (learning day/list)
# 9. Corr: source response type. 1-correct, 2-source confusion, 3-intrusion, 0-incorrect
# 10. Conf: source response confidence. 1-4
# 11. aResp: association response
# 12. aConf: association response confidence. 1-4
# 13. Correct: correct response of source memory (List1>D1, List2>D2, List3>new)
# 14. Int: intrusion response of source memory (List2>1)
# 15. err: source confusion response of source memory (List1>2)
# 16. Incorrr: incorrect response of source memory (List1&2>new, List3>day1&2)

table(p3$SN)
## 
##   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16 
## 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240 240
length(unique(p3$SN[p3$Btw==1]))
## [1] 8
length(unique(p3$SN[p3$Btw==2]))
## [1] 8



2.2.1 Day 3 출처 기억 반응 분석


출처 반응의 종속 변인은 주요 종속 변인인 목록 1 정확반응 (List 1 Correct, L1→D1), 목록 2 정확반응 (List 2 Correct, L2→D2), 출처 혼동 (Source Confusion, L1→D2), 침범 (Intrusion, L2→D1) 과 부가적인 변인인 목록 3 정확반응 (List 3 Correct, L3→New), 목록 3 오경보 1과 2 (List 3 False Alarm - Day 1&2, L3→D1&2), 목록 1 & 2 누락 (Miss, L1&2→New)으로 구분되어 분석되었다.


2.2.1.1 출처 반응의 기술통계


두 집단의 물체 목록에 따른 출처 반응 패턴을 표로 나타내었다. List 3 Correct, List 3 False Alarm, List 1&2 Miss는 두 집단 모두에서 천장 효과와 바닥 효과를 보였다. 따라서 이 반응들은 분석에 포함하지 않았다.

# phase 1, subject-level, long-format
p3.AsyPtt.long.all <- p3 %>%  group_by(SN, Btw, cSrc, Resp) %>%
  summarise(Rsp = length(Resp)/80*100) %>% ungroup()
p3.AsyPtt.wide.all <- p3.AsyPtt.long.all %>% spread(key = Resp, value = Rsp)
p3.AsyPtt.long.all <- gather(p3.AsyPtt.wide.all, Resp, Rsp, Day_1:New, factor_key=TRUE)
p3.AsyPtt.long.all[is.na(p3.AsyPtt.long.all)] <- 0 
p3.AsyPtt.long.all <- arrange(p3.AsyPtt.long.all, SN, cSrc, Resp, Rsp)
p3.AsyPtt.long.exp <- p3.AsyPtt.long.all %>% filter(Btw==1)
p3.AsyPtt.long.con <- p3.AsyPtt.long.all %>% filter(Btw==2)

# wide format
p3.AsyPtt.swide.all <- p3.AsyPtt.long.all %>% spread(key = Resp, value = Rsp)
p3.AsyPtt.swide.exp <- p3.AsyPtt.swide.all %>% filter(Btw==1)
p3.AsyPtt.swide.con <- p3.AsyPtt.swide.all %>% filter(Btw==2)

# summary table
p3.AsyPtt.g.all <- p3.AsyPtt.long.all %>% group_by(Btw, cSrc, Resp) %>%
  summarise(Rsp.M = mean(Rsp), Rsp.SD = sd(Rsp)) %>% ungroup()
p3.AsyPtt.g.all$Rsp.se <- Rmisc::summarySEwithin(data = p3.AsyPtt.long.all, measurevar = "Rsp", idvar = "SN", 
                                                 betweenvars = "Btw", withinvars = c("cSrc","Resp"))$se
p3.AsyPtt.g.all$Rsp.ci <- Rmisc::summarySEwithin(data = p3.AsyPtt.long.all, measurevar = "Rsp", idvar = "SN", 
                                                 betweenvars = "Btw", withinvars = c("cSrc","Resp"))$ci
p3.AsyPtt.g.exp <- p3.AsyPtt.g.all %>% filter(Btw==1)
p3.AsyPtt.g.con <- p3.AsyPtt.g.all %>% filter(Btw==2)

p3.AsyPtt.g.table <- p3.AsyPtt.g.all %>% unite(cSrc_Resp, cSrc:Resp, remove=TRUE) %>% rename(Src_Resp = "cSrc_Resp")
p3.AsyPtt.g.table$Src_Resp[p3.AsyPtt.g.table$Src_Resp=='List_1_Day_1'] <- 'List 1 Correct'
p3.AsyPtt.g.table$Src_Resp[p3.AsyPtt.g.table$Src_Resp=='List_2_Day_2'] <- 'List 2 Correct'
p3.AsyPtt.g.table$Src_Resp[p3.AsyPtt.g.table$Src_Resp=='List_1_Day_2'] <- 'Source Confusion'
p3.AsyPtt.g.table$Src_Resp[p3.AsyPtt.g.table$Src_Resp=='List_2_Day_1'] <- 'Intrusion'
p3.AsyPtt.g.table$Src_Resp[p3.AsyPtt.g.table$Src_Resp=='List_1_Day_3'] <- 'List 1 Miss'
p3.AsyPtt.g.table$Src_Resp[p3.AsyPtt.g.table$Src_Resp=='List_2_Day_3'] <- 'List 2 Miss'
p3.AsyPtt.g.table$Src_Resp[p3.AsyPtt.g.table$Src_Resp=='List_3_New'] <- 'List 3 Correct'
p3.AsyPtt.g.table$Src_Resp[p3.AsyPtt.g.table$Src_Resp=='List_3_Day_1'] <- 'List 3 FA - Day 1'
p3.AsyPtt.g.table$Src_Resp[p3.AsyPtt.g.table$Src_Resp=='List_3_Day_2'] <- 'List 3 FA - Day 2'
srt <- c(1, 3, 5, 4, 2, 6, 8, 9, 7)
p3.AsyPtt.g.table.1 <- p3.AsyPtt.g.table %>% filter(Btw == 1) %>% arrange(srt)
p3.AsyPtt.g.table.2 <- p3.AsyPtt.g.table %>% filter(Btw == 2) %>% arrange(srt)
p3.AsyPtt.g.table.all <- rbind(p3.AsyPtt.g.table.1, p3.AsyPtt.g.table.2)
p3.AsyPtt.g.table.all %>% kable(digits=2)
Btw Src_Resp Rsp.M Rsp.SD Rsp.se Rsp.ci
1 List 1 Correct 78.44 8.09 3.04 7.18
1 List 2 Correct 66.09 9.90 3.71 8.78
1 Source Confusion 18.59 7.92 2.97 7.02
1 Intrusion 31.56 8.73 3.27 7.74
1 List_1_New 2.97 1.33 0.50 1.18
1 List_2_New 2.34 1.70 0.64 1.50
1 List 3 Correct 96.88 4.01 1.50 3.55
1 List 3 FA - Day 1 2.03 3.40 1.28 3.02
1 List 3 FA - Day 2 1.09 1.41 0.53 1.25
2 List 1 Correct 78.28 6.12 2.30 5.43
2 List 2 Correct 74.22 9.21 3.45 8.17
2 Source Confusion 18.75 5.43 2.04 4.81
2 Intrusion 22.97 7.56 2.83 6.70
2 List_1_New 2.97 3.34 1.25 2.96
2 List_2_New 2.81 2.48 0.93 2.20
2 List 3 Correct 98.28 4.38 1.64 3.88
2 List 3 FA - Day 1 1.56 3.94 1.48 3.49
2 List 3 FA - Day 2 0.16 0.44 0.17 0.39


2.2.1.2 출처 반응의 비대칭적 패턴


두 집단의 물체 목록에 따른 출처 반응 패턴을 그래프로 나타내었다. 그래프에서 A는 전체 집단의 물체 목록에 따른 출처 반응, B는 실험 집단, C는 통제집단을 나타낸다. A 그래프에서 x축은 물체 목록에 따른 출처 반응, y축은 반응 비율을 나타내며, 색은 각 집단을 나타낸다. B,C 그래프의 x축은 각 학습일에 학습한 물체 목록(첫째 날 학습 목록 1, 둘째 날 학습 목록 2, 새로운 물체 목록 3)을 나타내며, y축은 반응의 비율을 나타낸다. 각 집단에서 해당 물체 목록에 대한 출처 귀인 반응을 첫째 날 학습 Day 1, 둘째 날 학습 Day 2, 학습하지 않음 New로 구분하였다. 모든 그래프에서 빨간 점은 평균을 나타내며, 오차 막대는 95% 신뢰구간으로 표시하였다.

## plot
p3.all.plot1 <- ggplot(data=p3.AsyPtt.long.all, aes(x=Resp, y=Rsp, fill=Btw)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .9, width = 0.8, colour="black", size = 1.02) +
  geom_pointrange(data=p3.AsyPtt.g.all, aes(x = Resp, y=Rsp.M, ymin = Rsp.M-Rsp.ci, ymax = Rsp.M+Rsp.ci),
                  position = position_dodge(0.80), color = "darkred", size = 1, show.legend = FALSE) +
  facet_grid(.~cSrc, scales="free_x", space = "free",
             labeller = labeller(cSrc = c("List_1" = "List 1 (Day 1)","List_2" = "List 2 (Day 2)","List_3" = "List 3 (New)"))) +
  scale_x_discrete(labels=c("Day 1","Day 2","New")) +
  scale_fill_manual(values = c("#feb24c", "#91bfdb"),
                    labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(0, 105), clip = "on") +
  labs(x = "Source Response by Object List", y = "Proportion of Response (%)", fill ="Group") +
  # ggtitle("Source Memory Response") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        # plot.title = element_text(hjust = 0.5),
        legend.position="top")
p3.exp.plot1 <- ggplot(data=p3.AsyPtt.long.exp, aes(x=cSrc, y=Rsp, fill=Resp)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .7, width = .65, colour="black", size = 1.02) +
  geom_point(position=position_dodge(0.65), aes(x=cSrc, y=Rsp, group=Resp, color = SN), size = 3, alpha = .4, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.exp,cSrc=="List_1"), inherit.aes = FALSE,
               aes(x=1-.22, y=filter(p3.AsyPtt.swide.exp,cSrc=="List_1")$"Day_1",
                   xend=1, yend=filter(p3.AsyPtt.swide.exp,cSrc=="List_1")$"Day_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.exp,cSrc=="List_1"), inherit.aes = FALSE,
               aes(x=1, y=filter(p3.AsyPtt.swide.exp,cSrc=="List_1")$"Day_2",
                   xend=1+.22, yend=filter(p3.AsyPtt.swide.exp,cSrc=="List_1")$"New", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.exp,cSrc=="List_2"), inherit.aes = FALSE,
               aes(x=2-.22, y=filter(p3.AsyPtt.swide.exp,cSrc=="List_2")$"Day_1",
                   xend=2, yend=filter(p3.AsyPtt.swide.exp,cSrc=="List_2")$"Day_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.exp,cSrc=="List_2"), inherit.aes = FALSE,
               aes(x=2, y=filter(p3.AsyPtt.swide.exp,cSrc=="List_2")$"Day_2",
                   xend=2+.22, yend=filter(p3.AsyPtt.swide.exp,cSrc=="List_2")$"New", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.exp,cSrc=="List_3"), inherit.aes = FALSE,
               aes(x=3-.22, y=filter(p3.AsyPtt.swide.exp,cSrc=="List_3")$"Day_1",
                   xend=3, yend=filter(p3.AsyPtt.swide.exp,cSrc=="List_3")$"Day_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.exp,cSrc=="List_3"), inherit.aes = FALSE,
               aes(x=3, y=filter(p3.AsyPtt.swide.exp,cSrc=="List_3")$"Day_2",
                   xend=3+.22, yend=filter(p3.AsyPtt.swide.exp,cSrc=="List_3")$"New", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_pointrange(data=p3.AsyPtt.g.exp, aes(x = cSrc, y = Rsp.M, ymin = Rsp.M-Rsp.ci, ymax = Rsp.M+Rsp.ci),
                  position = position_dodge(0.65), color = "darkred", size = 1, show.legend = FALSE) +
  scale_fill_manual(values = c("#56b4e9", "#e69f00", "#ff6164"),
                    labels = c("Day 1", "Day 2", "New")) +
  scale_x_discrete(labels = c("List 1", "List 2", "List 3")) +
  coord_cartesian(ylim = c(0, 105), clip = "on") +
  labs(x = "Object List", y = "Proportion of Response (%)", fill ="Attribution") +
  # ggtitle("Source Memory Response (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        legend.position="top")
p3.con.plot1 <- ggplot(data=p3.AsyPtt.long.con, aes(x=cSrc, y=Rsp, fill=Resp)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .7, width = .65, colour="black", size = 1.02) +
  geom_point(position=position_dodge(0.65), aes(x=cSrc, y=Rsp, group=Resp, color = SN), size = 3, alpha = .4, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.con,cSrc=="List_1"), inherit.aes = FALSE,
               aes(x=1-.22, y=filter(p3.AsyPtt.swide.con,cSrc=="List_1")$"Day_1",
                   xend=1, yend=filter(p3.AsyPtt.swide.con,cSrc=="List_1")$"Day_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.con,cSrc=="List_1"), inherit.aes = FALSE,
               aes(x=1, y=filter(p3.AsyPtt.swide.con,cSrc=="List_1")$"Day_2",
                   xend=1+.22, yend=filter(p3.AsyPtt.swide.con,cSrc=="List_1")$"New", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.con,cSrc=="List_2"), inherit.aes = FALSE,
               aes(x=2-.22, y=filter(p3.AsyPtt.swide.con,cSrc=="List_2")$"Day_1",
                   xend=2, yend=filter(p3.AsyPtt.swide.con,cSrc=="List_2")$"Day_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.con,cSrc=="List_2"), inherit.aes = FALSE,
               aes(x=2, y=filter(p3.AsyPtt.swide.con,cSrc=="List_2")$"Day_2",
                   xend=2+.22, yend=filter(p3.AsyPtt.swide.con,cSrc=="List_2")$"New", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.con,cSrc=="List_3"), inherit.aes = FALSE,
               aes(x=3-.22, y=filter(p3.AsyPtt.swide.con,cSrc=="List_3")$"Day_1",
                   xend=3, yend=filter(p3.AsyPtt.swide.con,cSrc=="List_3")$"Day_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.swide.con,cSrc=="List_3"), inherit.aes = FALSE,
               aes(x=3, y=filter(p3.AsyPtt.swide.con,cSrc=="List_3")$"Day_2",
                   xend=3+.22, yend=filter(p3.AsyPtt.swide.con,cSrc=="List_3")$"New", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_pointrange(data=p3.AsyPtt.g.con, aes(x = cSrc, y=Rsp.M, ymin = Rsp.M-Rsp.ci, ymax = Rsp.M+Rsp.ci),
                  position = position_dodge(0.65), color = "darkred", size = 1, show.legend = FALSE) +
  scale_fill_manual(values = c("#56b4e9", "#e69f00", "#ff6164"),
                    labels = c("Day 1", "Day 2", "New")) +
  scale_x_discrete(labels = c("List 1", "List 2", "List 3")) +
  coord_cartesian(ylim = c(0, 105), clip = "on") +
  labs(x = "Object List", y = "Proportion of Response (%)", fill ="Attribution") +
  # ggtitle("Source Memory Response (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        legend.position="top")

ggpubr::ggarrange(p3.all.plot1, labels = "A) All Group",
          ggpubr::ggarrange(p3.exp.plot1, p3.con.plot1, ncol = 2, labels = c("B) Experimental", "C) Control")), 
          nrow = 2) 


2.2.1.2.1 목록 1, 목록 2의 출처 반응 오류 분석


2.2.1.2.1.1 혼합 요인 분산 분석


기억 갱신을 나타내는 비대칭적 출처 반응 패턴을 살펴보기 위해, 목록 1과 목록 2에서 학습 출처를 잘못 반응한 경우를 살펴보았다. Source Confusion (L1>D2)Intrusion (L2>D1)에서 집단 간, 집단 내의 차이를 분석하기 위해 집단과 물체 목록에서의 출처 오류를 요인으로 한 2 X 2 혼합 요인 분산분석을 수행하였다.

# List 1 & 2 Incorrect Source Response
p3.AsyPtt.long.all.2 <- p3.AsyPtt.long.all %>% unite(cSrc_Resp, cSrc:Resp, remove=FALSE) %>% 
  rename(sResp = "cSrc_Resp")
p3.AsyPtt.long.all.2$sResp <- factor(p3.AsyPtt.long.all.2$sResp)
p3.AsyPtt.long.all.2 <- p3.AsyPtt.long.all.2 %>% filter(sResp %in% c("List_1_Day_2", "List_2_Day_1"))
# p3.AsyPtt.long.all.2 %>% kable(digits=3)

p3.AsyPtt.g.all.2 <- p3.AsyPtt.long.all.2 %>% group_by(Btw, sResp) %>%
  summarise(Rsp.M = mean(Rsp), Rsp.SD = sd(Rsp)) %>% ungroup()
p3.AsyPtt.g.all.2$Rsp.se <- Rmisc::summarySEwithin(data = p3.AsyPtt.long.all.2, idvar = "SN",
                                                   measurevar = "Rsp", betweenvars = "Btw", withinvars = "sResp")$se
p3.AsyPtt.g.all.2$Rsp.ci <- Rmisc::summarySEwithin(data = p3.AsyPtt.long.all.2, idvar = "SN",
                                                   measurevar = "Rsp", betweenvars = "Btw", withinvars = "sResp")$ci
p3.AsyPtt.g.all.2 %>% kable(digit=2)
Btw sResp Rsp.M Rsp.SD Rsp.se Rsp.ci
1 List_1_Day_2 18.59 7.92 1.93 4.56
1 List_2_Day_1 31.56 8.73 1.93 4.56
2 List_1_Day_2 18.75 5.43 1.26 2.98
2 List_2_Day_1 22.97 7.56 1.26 2.98
p3.AsyPtt.all.2.aov <- aov_ez(id = "SN", dv = "Rsp", data = p3.AsyPtt.long.all.2, between = "Btw", within = "sResp")
anova(p3.AsyPtt.all.2.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1 14 75.042 1.897 0.119 0.190
sResp 1 14 37.709 15.668 0.528 0.001
Btw:sResp 1 14 37.709 4.061 0.225 0.064

분석 결과, 출처 반응의 주효과가 유의하였다. 집단의 주효과와 집단과 출처 반응의 상호작용은 유의하지 않았다. 잠정적인 패턴을 살펴보기 위해, 각 집단 내의 출처 오류와 집단 간의 출처 오류 차이를 살펴보았다.

# source response contrast
p3.AsyPtt.m2.1.all <- emmeans(p3.AsyPtt.all.2.aov, pairwise ~ sResp | Btw, type = "response")
p3.AsyPtt.m2.1.all$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
List_1_Day_2 - List_2_Day_1 1 -12.969 3.07 14 -4.224 0.001
List_1_Day_2 - List_2_Day_1 2 -4.219 3.07 14 -1.374 0.191
# group contrast
p3.AsyPtt.m2.2.all <- emmeans(p3.AsyPtt.all.2.aov, pairwise ~ Btw | sResp, type = "response")
p3.AsyPtt.m2.2.all$contrasts %>% kable(digits=3)
contrast sResp estimate SE df t.ratio p.value
1 - 2 List_1_Day_2 -0.156 3.394 14 -0.046 0.964
1 - 2 List_2_Day_1 8.594 4.083 14 2.105 0.054

출처 반응에 따른 사후 분석을 수행한 결과, 실험 집단에서 Source Confusion (L1>D2)Intrusion (L2>D1)보다 유의하게 낮은 비대칭적 출처 오귀인 패턴을 보였다. 통제 집단에서는 Source Confusion (L1>D2)Intrusion (L2>D1)`의 차이가 유의하지 않았다. 각 출처 반응에서 집단 간의 차이에 대한 사후 분석 결과, 실험 집단이 통제 집단 간의 Intrusion (L2>D1)** 차이는 유의하였다. 그러나 분산 분석에서 집단과 출처 반응 간의 상호작용이 유의하지 않았었다는 점을 고려할 필요가 있다.


2.2.1.2.2 목록 1, 목록 2 출처 반응 정확도


2.2.1.2.2.1 혼합 요인 분산 분석


목록 1, 목록 2의 출처 반응 정확도에서 집단과 출처 반응에 따른 차이를 분석하였다. 참가자 간 변인인 집단과 참가자 내 변인인 출처 반응을 요인으로 한 2 X 2 혼합 요인 분산분석을 수행하였다.

# List 1 & 2 & 3 Correct Source Response
p3.AsyPtt.long.all.1 <- p3.AsyPtt.long.all %>% unite(cSrc_Resp, cSrc:Resp, remove=FALSE) %>% 
  rename(sResp = "cSrc_Resp") 
p3.AsyPtt.long.all.1$sResp <- factor(p3.AsyPtt.long.all.1$sResp)
p3.AsyPtt.long.all.1 <- p3.AsyPtt.long.all.1 %>% filter(sResp %in% c("List_1_Day_1", "List_2_Day_2"))
# p3.AsyPtt.long.all.1 %>% kable(digits=3)

p3.AsyPtt.g.all.1 <- p3.AsyPtt.long.all.1 %>% group_by(Btw, sResp) %>%
  summarise(Rsp.M = mean(Rsp), Rsp.SD = sd(Rsp)) %>% ungroup()
p3.AsyPtt.g.all.1$Rsp <- p3.AsyPtt.g.all.1$Rsp.M
p3.AsyPtt.g.all.1$Rsp.se <- Rmisc::summarySEwithin(data = p3.AsyPtt.long.all.1, idvar = "SN",
                                                   measurevar = "Rsp", betweenvars = "Btw", withinvars = "sResp")$se
p3.AsyPtt.g.all.1$Rsp.ci <- Rmisc::summarySEwithin(data = p3.AsyPtt.long.all.1, idvar = "SN",
                                                   measurevar = "Rsp", betweenvars = "Btw", withinvars = "sResp")$ci

p3.AsyPtt.g.all.1 %>% kable(digit=2)
Btw sResp Rsp.M Rsp.SD Rsp Rsp.se Rsp.ci
1 List_1_Day_1 78.44 8.09 78.44 2.14 5.07
1 List_2_Day_2 66.09 9.90 66.09 2.14 5.07
2 List_1_Day_1 78.28 6.12 78.28 1.04 2.46
2 List_2_Day_2 74.22 9.21 74.22 1.04 2.46
p3.AsyPtt.all.1.aov <- aov_ez(id = "SN", dv = "Rsp", data = p3.AsyPtt.long.all.1, between = "Btw", within = "sResp")
anova(p3.AsyPtt.all.1.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1 14 102.560 1.238 0.081 0.285
sResp 1 14 40.311 13.354 0.488 0.003
Btw:sResp 1 14 40.311 3.402 0.196 0.086

분석 결과, 출처 반응의 주효과가 유의하였다. 집단의 주효과와 집단과 출처 반응의 상호작용은 유의하지 않았다.

p3.AsyPtt.m1.1.all <- emmeans(p3.AsyPtt.all.1.aov, pairwise ~ sResp | Btw, type = "response")
p3.AsyPtt.m1.1.all$contrasts %>% kable(digit=2)
contrast Btw estimate SE df t.ratio p.value
List_1_Day_1 - List_2_Day_2 1 12.34 3.17 14 3.89 0.00
List_1_Day_1 - List_2_Day_2 2 4.06 3.17 14 1.28 0.22
# group contrast
p3.AsyPtt.m1.2.all <- emmeans(p3.AsyPtt.all.1.aov, pairwise ~ Btw | sResp, type = "response")
p3.AsyPtt.m1.2.all$contrasts %>% kable(digits=3)
contrast sResp estimate SE df t.ratio p.value
1 - 2 List_1_Day_1 0.156 3.588 14 0.044 0.966
1 - 2 List_2_Day_2 -8.125 4.780 14 -1.700 0.111

각 집단에서 출처 반응에 따른 사후 분석 결과, 실험 집단에서 List 1 CorrectList 2 Correct보다 유의하게 높은 정확도를 보였다. 각 출처 반응에서 집단 간의 차이를 사후 분석한 결과, 모든 비교에서 유의한 차이가 나타나지 않았다.


2.2.1.2.3 기타 분석
2.2.1.2.3.1 목록 1, 목록 2의 누락 출처 반응


두 집단에서 List 1 MissList 2 Miss의 차이를 분석하기 위해 집단과 반응을 요인으로한 2 X 2 혼합 요인 분산 분석을 수행하였다.

# List 1 & 2 Error
p3.AsyPtt.long.all.3 <- p3.AsyPtt.long.all %>% unite(cSrc_Resp, cSrc:Resp, remove=FALSE) %>% 
  rename(sResp = "cSrc_Resp")
p3.AsyPtt.long.all.3$sResp <- factor(p3.AsyPtt.long.all.3$sResp)
p3.AsyPtt.long.all.3 <- p3.AsyPtt.long.all.3 %>% filter(sResp %in% c("List_1_New", "List_2_New"))

p3.AsyPtt.g.all.3 <- p3.AsyPtt.long.all.3 %>% group_by(Btw, sResp) %>%
  summarise(Rsp.M = mean(Rsp), Rsp.SD = sd(Rsp)) %>% ungroup()
p3.AsyPtt.g.all.3$Rsp <- p3.AsyPtt.g.all.2$Rsp.M
p3.AsyPtt.g.all.3$Rsp.se <- Rmisc::summarySEwithin(data = p3.AsyPtt.long.all.3, idvar = "SN",
                                                   measurevar = "Rsp", betweenvars = "Btw", withinvars = "sResp")$se
p3.AsyPtt.g.all.3$Rsp.ci <- Rmisc::summarySEwithin(data = p3.AsyPtt.long.all.3, idvar = "SN",
                                                   measurevar = "Rsp", betweenvars = "Btw", withinvars = "sResp")$ci
p3.AsyPtt.g.all.3 %>% kable(digit=2)
Btw sResp Rsp.M Rsp.SD Rsp Rsp.se Rsp.ci
1 List_1_New 2.97 1.33 18.59 0.43 1.03
1 List_2_New 2.34 1.70 31.56 0.43 1.03
2 List_1_New 2.97 3.34 18.75 0.40 0.96
2 List_2_New 2.81 2.48 22.97 0.40 0.96
p3.AsyPtt.all.3.aov <- aov_ez(id = "SN", dv = "Rsp", data = p3.AsyPtt.long.all.3, between = "Btw", within = "sResp")
anova(p3.AsyPtt.all.3.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1 14 8.447 0.052 0.004 0.823
sResp 1 14 2.504 0.487 0.034 0.496
Btw:sResp 1 14 2.504 0.175 0.012 0.682

분석 결과, 모든 효과가 유의하지 않았다.


2.2.1.2.3.2 목록 3 정확반응


두 집단 간의 List 3 Correct를 비교하였다.

# List 3 Correct
p3.AsyPtt.long.all.4 <- p3.AsyPtt.long.all %>% unite(cSrc_Resp, cSrc:Resp, remove=FALSE) %>% 
  rename(sResp = "cSrc_Resp")
p3.AsyPtt.long.all.4$sResp <- factor(p3.AsyPtt.long.all.4$sResp)
p3.AsyPtt.long.all.4 <- p3.AsyPtt.long.all.4 %>% filter(sResp %in% c("List_3_New"))

p3.AsyPtt.g.all.4 <- p3.AsyPtt.long.all.4 %>% group_by(Btw) %>%
  summarise(Rsp.M = mean(Rsp), Rsp.SD = sd(Rsp)) %>% ungroup()
p3.AsyPtt.g.all.4$Rsp.se <- Rmisc::summarySE(data = p3.AsyPtt.long.all.4, 
                                                   measurevar = "Rsp", groupvars = "Btw")$se
p3.AsyPtt.g.all.4$Rsp.ci <- Rmisc::summarySE(data = p3.AsyPtt.long.all.4, 
                                                   measurevar = "Rsp", groupvars = "Btw")$ci
p3.AsyPtt.g.all.4 %>% kable(digit=2)
Btw Rsp.M Rsp.SD Rsp.se Rsp.ci
1 96.88 4.01 1.42 3.35
2 98.28 4.38 1.55 3.66
p3.AsyPtt.all.4.aov <- aov_ez(id = "SN", dv = "Rsp", data = p3.AsyPtt.long.all.4, between = "Btw")
anova(p3.AsyPtt.all.4.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1 14 17.62 0.449 0.031 0.514

분석 결과, List 3 Correct에서 두 집단 간의 차이는 유의하지 않았다.


2.2.1.2.3.3 목록 3에서의 오경보


List 3 FA - Day 1List 3 FA - Day 2에서 집단과 출처 반응을 요인으로 한 2 X 2 혼합 요인 분산 분석을 수행하였다.

# List 3 Incorrect Source Response 
p3.AsyPtt.long.all.5 <- p3.AsyPtt.long.all %>% unite(cSrc_Resp, cSrc:Resp, remove=FALSE) %>% 
  rename(sResp = "cSrc_Resp")
p3.AsyPtt.long.all.5$sResp <- factor(p3.AsyPtt.long.all.5$sResp)
p3.AsyPtt.long.all.5 <- p3.AsyPtt.long.all.5 %>% filter(sResp %in% c("List_3_Day_1", "List_3_Day_2"))

p3.AsyPtt.g.all.5 <- p3.AsyPtt.long.all.5 %>% group_by(Btw, sResp) %>%
  summarise(Rsp.M = mean(Rsp), Rsp.SD = sd(Rsp)) %>% ungroup()
p3.AsyPtt.g.all.5$Rsp.se <- Rmisc::summarySEwithin(data = p3.AsyPtt.long.all.5, idvar = "SN",
                                                   measurevar = "Rsp", betweenvars = "Btw", withinvars = "sResp")$se
p3.AsyPtt.g.all.5$Rsp.ci <- Rmisc::summarySEwithin(data = p3.AsyPtt.long.all.5, idvar = "SN",
                                                   measurevar = "Rsp", betweenvars = "Btw", withinvars = "sResp")$ci
p3.AsyPtt.g.all.5 %>% kable(digit=2)
Btw sResp Rsp.M Rsp.SD Rsp.se Rsp.ci
1 List_3_Day_1 2.03 3.40 0.62 1.47
1 List_3_Day_2 1.09 1.41 0.62 1.47
2 List_3_Day_1 1.56 3.94 0.66 1.55
2 List_3_Day_2 0.16 0.44 0.66 1.55
p3.AsyPtt.all.5.aov <- aov_ez(id = "SN", dv = "Rsp", data = p3.AsyPtt.long.all.5, between = "Btw", within = "sResp")
anova(p3.AsyPtt.all.5.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1 14 8.810 0.449 0.031 0.514
sResp 1 14 5.824 1.886 0.119 0.191
Btw:sResp 1 14 5.824 0.075 0.005 0.788

분석 결과, 모든 효과가 유의하지 않았다.


2.2.1.3 예측 오류 정도와 기억 갱신 효과의 관계 - 조건


2.2.1.3.1 목록 1 정확 반응

각 집단과 예측 오류 조건에서 List 1 Correct의 차이가 있는지 확인하기 위해 각 조건에 대한 정확도 평균과 표준편차를 계산하였다. 아래의 그래프에서 A는 전체 집단, B는 실험 집단, C는 통제 집단을 나타내며, 빨간 점은 평균, 오차 막대는 95% 신뢰구간을 표시한다.

## List 1 Correct Response
# long format
p3.Acc.long.all.1 <- p3 %>% filter(cSrc == "List_1", cPE != "pe0") %>% group_by(SN, Btw, cPE) %>% 
  summarise(Acc = mean(Correct)*100) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p3.Acc.long.exp.1 <- p3.Acc.long.all.1 %>% filter(Btw==1)
p3.Acc.long.con.1 <- p3.Acc.long.all.1 %>% filter(Btw==2)

# wide format
p3.Acc.swide.all.1 <- p3.Acc.long.all.1 %>% spread(key = cPE, value = Acc)
p3.Acc.swide.exp.1 <- p3.Acc.swide.all.1 %>% filter(Btw==1)
p3.Acc.swide.con.1 <- p3.Acc.swide.all.1 %>% filter(Btw==2)

# summary
p3.Acc.g.all.1 <- p3.Acc.long.all.1 %>%  group_by(Btw, cPE) %>% 
  summarise(Acc.M = mean(Acc), Acc.SD = sd(Acc)) %>% ungroup() 
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p3.Acc.g.all.1$Acc.se <- Rmisc::summarySEwithin(data = p3.Acc.long.all.1, measurevar = "Acc", 
                                                idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$se
p3.Acc.g.all.1$Acc.ci <- Rmisc::summarySEwithin(data = p3.Acc.long.all.1, measurevar = "Acc", 
                                                idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$ci
p3.Acc.g.exp.1 <- p3.Acc.g.all.1 %>% filter(Btw==1)
p3.Acc.g.con.1 <- p3.Acc.g.all.1 %>% filter(Btw==2)
p3.Acc.g.all.1 %>% kable(digits=2)
Btw cPE Acc.M Acc.SD Acc.se Acc.ci
1 pe1 73.12 14.62 2.80 6.63
1 pe2 79.38 8.63 3.11 7.36
1 pe3 81.88 9.23 3.80 8.98
1 pe4 79.38 10.16 1.26 2.98
2 pe1 71.88 11.93 3.97 9.40
2 pe2 76.88 7.53 1.95 4.61
2 pe3 77.50 10.00 3.32 7.85
2 pe4 86.88 8.43 1.95 4.61
## plot
p3.plot2.2.all.1 <- ggplot(p3.Acc.g.all.1, mapping=aes(x=cPE, y=Acc.M, group=Btw)) + 
  geom_ribbon(aes(ymin=Acc.M-Acc.ci, ymax=Acc.M+Acc.ci, fill=Btw), alpha=0.5) + 
  geom_line(p3.Acc.g.all.1, mapping = aes(x=cPE, y=Acc.M, color = Btw), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = cPE, y = Acc.M, ymin=Acc.M, ymax=Acc.M, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("#e69f00", "#56b4e9"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#e69f00", "#56b4e9")) +
  coord_cartesian(ylim = c(30, 100), clip = "on") +
  labs(x = "Prediction Error", y = "List 1 Correct (%)", fill = 'Group') +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 1 Correct Source Memory") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position = "top")

p3.plot2.2.exp.1 <- ggplot(p3.Acc.g.exp.1, mapping=aes(x=cPE, y=Acc.M, group=1)) + 
  geom_ribbon(aes(ymin=Acc.M-Acc.ci, ymax=Acc.M+Acc.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=Acc.M, ymax=Acc.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Acc.long.exp.1, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=Acc, group=SN, color=SN)) +
  geom_point(p3.Acc.long.exp.1, mapping = aes(x=cPE, y=Acc, group=SN, color=SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(30, 100), clip = "on") +
  labs(x = "Prediction Error", y = "List 1 Correct (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 1 Source Memory (L1>D1; Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))

p3.plot2.2.con.1 <- ggplot(p3.Acc.g.con.1, mapping=aes(x=cPE, y=Acc.M, group=1)) + 
  geom_ribbon(aes(ymin=Acc.M-Acc.ci, ymax=Acc.M+Acc.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=Acc.M, ymax=Acc.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Acc.long.con.1, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=Acc, group=SN, color=SN)) +
  geom_point(p3.Acc.long.con.1, mapping = aes(x=cPE, y=Acc, group=SN, color=SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(30, 100), clip = "on") +
  labs(x = "Prediction Error", y = "List 1 Correct (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 1 Source Memory (L1>D1; Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
ggpubr::ggarrange(p3.plot2.2.all.1, p3.plot2.2.exp.1, p3.plot2.2.con.1, ncol=3, labels = c("A) All Group", "B) Experimental", "C) Control")) 


집단과 예측 오류 조건을 요인으로한 2 X 3 혼합 요인 분산분석을 수행하였다.

p3.Acc.all.aov.1 <- aov_ez(id = "SN", dv = "Acc", data = p3.Acc.long.all.1, between = "Btw", within = "cPE")
anova(p3.Acc.all.aov.1, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 205.971 0.002 0.000 0.966
cPE 2.127 29.771 102.263 4.331 0.236 0.021
Btw:cPE 2.127 29.771 102.263 1.529 0.098 0.233

분석 결과, 예측 오류의 주효과가 유의하였다.

p3.Acc.all.aov.1.ph1 <- emmeans(p3.Acc.all.aov.1, pairwise ~ cPE | Btw, type = "response")
p3.Acc.all.aov.1.ph1$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
pe1 - pe2 1 -6.250 4.159 14 -1.503 0.462
pe1 - pe3 1 -8.750 5.677 14 -1.541 0.441
pe1 - pe4 1 -6.250 3.939 14 -1.587 0.417
pe2 - pe3 1 -2.500 4.838 14 -0.517 0.954
pe2 - pe4 1 0.000 2.835 14 0.000 1.000
pe3 - pe4 1 2.500 3.500 14 0.714 0.890
pe1 - pe2 2 -5.000 4.159 14 -1.202 0.636
pe1 - pe3 2 -5.625 5.677 14 -0.991 0.757
pe1 - pe4 2 -15.000 3.939 14 -3.808 0.009
pe2 - pe3 2 -0.625 4.838 14 -0.129 0.999
pe2 - pe4 2 -10.000 2.835 14 -3.528 0.016
pe3 - pe4 2 -9.375 3.500 14 -2.679 0.076
p3.Acc.all.aov.1.ph2 <- emmeans(p3.Acc.all.aov.1, pairwise ~ Btw | cPE, type = "response")
p3.Acc.all.aov.1.ph2$contrasts %>% kable(digits=3)
contrast cPE estimate SE df t.ratio p.value
1 - 2 pe1 1.250 6.673 14 0.187 0.854
1 - 2 pe2 2.500 4.050 14 0.617 0.547
1 - 2 pe3 4.375 4.812 14 0.909 0.379
1 - 2 pe4 -7.500 4.665 14 -1.608 0.130

집단에서 예측 오류에 따른 List 1 Correct 분석 결과, 통제집단에서 PE 4 조건은 PE 1 조건보다 유의하게 높은 List 1 Correct 수준을 보였다.


2.2.1.3.2 목록 1 출처 혼동


Source Confusion에서 집단과 예측 오류 조건에 따른 평균과 표준편차를 계산하였다. 아래의 그래프에서 A는 전체 집단, B는 실험 집단, C는 통제 집단을 나타내며, 빨간 점은 평균, 빨간 리본은 95% 신뢰구간을 나타낸다.


## List 1 Source Confusion
# long format
p3.Err.long.all <- p3 %>% filter(cSrc == "List_1", cPE != "pe0") %>% group_by(SN, Btw, cPE) %>% 
  summarise(Error = mean(Err)*100) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p3.Err.wide.all <- p3.Err.long.all %>% spread(key = cPE, value = Error)
p3.Err.long.all <- gather(p3.Err.wide.all, cPE, Error, pe1:pe4, factor_key=TRUE)
p3.Err.long.all[is.na(p3.Err.long.all)] <- 0 
p3.Err.long.all <- arrange(p3.Err.long.all, SN, Btw, Error)
p3.Err.long.exp <- p3.Err.long.all %>% filter(Btw==1)
p3.Err.long.con <- p3.Err.long.all %>% filter(Btw==2)

# wide format
p3.Err.swide.all <- p3.Err.long.all %>% spread(key = cPE, value = Error)
p3.Err.swide.exp <- p3.Err.swide.all %>% filter(Btw==1)
p3.Err.swide.con <- p3.Err.swide.all %>% filter(Btw==2)

# summary
p3.Err.g.all <- p3.Err.long.all %>%  group_by(Btw, cPE) %>% 
  summarise(Err.M = mean(Error), Err.SD = sd(Error)) %>% ungroup()
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p3.Err.g.all$Err.se <- Rmisc::summarySEwithin(data = p3.Err.long.all, measurevar = "Error", 
                                              idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$se
p3.Err.g.all$Err.ci <- Rmisc::summarySEwithin(data = p3.Err.long.all, measurevar = "Error", 
                                              idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$ci
p3.Err.g.exp <- p3.Err.g.all %>% filter(Btw==1)
p3.Err.g.con <- p3.Err.g.all %>% filter(Btw==2)
p3.Err.g.all %>% kable(digits=2)
Btw cPE Err.M Err.SD Err.se Err.ci
1 pe1 26.25 13.02 2.61 6.17
1 pe2 18.12 9.98 3.33 7.87
1 pe3 15.00 10.69 4.19 9.92
1 pe4 15.00 10.00 1.82 4.30
2 pe1 26.25 9.91 3.56 8.41
2 pe2 19.38 6.78 1.91 4.52
2 pe3 17.50 6.55 2.15 5.08
2 pe4 11.88 9.23 2.20 5.20
## plot 
p3.plot2.3.all.1 <- ggplot(p3.Err.g.all, mapping=aes(x=cPE, y=Err.M, group=Btw)) + 
  geom_ribbon(aes(ymin=Err.M-Err.ci, ymax=Err.M+Err.ci, fill=Btw), alpha=0.5) + 
  geom_line(p3.Err.g.all, mapping = aes(x=cPE, y=Err.M, color = Btw), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = cPE, y = Err.M, ymin=Err.M, ymax=Err.M, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("#e69f00", "#56b4e9"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#e69f00", "#56b4e9")) +
  coord_cartesian(ylim = c(0, 80), clip = "on") +
  labs(x = "Prediction Error", y = "Source Confusion (%)", fill = 'Group') +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 1 Source Confusion") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position="top")

p3.plot2.3.exp <- ggplot(p3.Err.g.exp, mapping=aes(x=cPE, y=Err.M, group=1)) + 
  geom_ribbon(aes(ymin=Err.M-Err.ci, ymax=Err.M+Err.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=Err.M, ymax=Err.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Err.long.exp, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=Error, group=SN, color=SN)) +
  geom_point(p3.Err.long.exp, mapping = aes(x=cPE, y=Error, group=SN, color=SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(0, 80), clip = "on") +
  labs(x = "Prediction Error", y = "Source Confusion (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("Source Confusions (L1>D2; Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
p3.plot2.3.con <- ggplot(p3.Err.g.con, mapping=aes(x=cPE, y=Err.M, group=1)) + 
  geom_ribbon(aes(ymin=Err.M-Err.ci, ymax=Err.M+Err.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=Err.M, ymax=Err.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Err.long.con, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=Error, group=SN, color=SN)) +
  geom_point(p3.Err.long.con, mapping = aes(x=cPE, y=Error, group=SN, color=SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(0, 80), clip = "on") +
  labs(x = "Prediction Error", y = "Source Confusion (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("Source Confusions (L1>D2; Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
ggpubr::ggarrange(p3.plot2.3.all.1, p3.plot2.3.exp, p3.plot2.3.con, ncol=3, labels = c("A) All Group", "B) Experimental", "C) Control")) 


Source Confusion이 집단, 예측 오류 조건에 따라 다른지 살펴보기 위해, 2 X 4 혼합 요인 분산분석을 수행하였다.


p3.Err.all.aov <- aov_ez(id = "SN", dv = "Error", data = p3.Err.long.all, between = "Btw", within = "cPE")
anova(p3.Err.all.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.00 184.319 0.002 0.000 0.964
cPE 2.494 34.92 77.610 7.496 0.349 0.001
Btw:cPE 2.494 34.92 77.610 0.361 0.025 0.745

분석 결과, 예측 오류 조건의 주효과가 유의하였다.

p3.scnf.m1.all <- emmeans(p3.Err.all.aov, pairwise ~ cPE | Btw, type = "response")
p3.scnf.m1.all$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
pe1 - pe2 1 8.125 4.002 14 2.030 0.224
pe1 - pe3 1 11.250 4.748 14 2.369 0.129
pe1 - pe4 1 11.250 3.849 14 2.923 0.049
pe2 - pe3 1 3.125 4.671 14 0.669 0.907
pe2 - pe4 1 3.125 2.908 14 1.075 0.710
pe3 - pe4 1 0.000 3.625 14 0.000 1.000
pe1 - pe2 2 6.875 4.002 14 1.718 0.351
pe1 - pe3 2 8.750 4.748 14 1.843 0.295
pe1 - pe4 2 14.375 3.849 14 3.735 0.011
pe2 - pe3 2 1.875 4.671 14 0.401 0.977
pe2 - pe4 2 7.500 2.908 14 2.579 0.090
pe3 - pe4 2 5.625 3.625 14 1.552 0.435
p3.scnf.m2.all <- emmeans(p3.Err.all.aov, pairwise ~ Btw | cPE, type = "response")
p3.scnf.m2.all$contrasts %>% kable(digits=3)
contrast cPE estimate SE df t.ratio p.value
1 - 2 pe1 0.000 5.786 14 0.000 1.000
1 - 2 pe2 -1.250 4.265 14 -0.293 0.774
1 - 2 pe3 -2.500 4.432 14 -0.564 0.582
1 - 2 pe4 3.125 4.812 14 0.649 0.527

집단에서 예측 오류에 따른 Source Confusion 차이를 살펴본 겨과, 실험 집단에서 PE 1 조건은 PE 3, PE 4 조건보다 낮은 Source Confusion 수준을 보였다. 통제 집단에서는 PE 1 조건이 PE 4 조건보다 낮은 Source Confusion을 보였다.


2.2.1.3.3 목록 2 정확 반응


List 2 Correct에서 집단과 예측 오류 조건에 따른 평균과 표준편차를 계산하였다. 아래의 그래프에서 A는 전체 집단, B는 실험 집단, C는 통제 집단을 나타내며, 빨간 점은 평균, 오차 막대는 95% 신뢰구간을 표시한다.


## List 2 Correct Source Memory
# long format
p3.Acc.long.all.2 <- p3 %>% filter(cSrc == "List_2", cPE != "pe0") %>% group_by(SN, Btw, cPE) %>% 
  summarise(Acc = mean(Correct)*100) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p3.Acc.long.exp.2 <- p3.Acc.long.all.2 %>% filter(Btw==1)
p3.Acc.long.con.2 <- p3.Acc.long.all.2 %>% filter(Btw==2)

# wide format
p3.Acc.swide.all.2 <- p3.Acc.long.all.2 %>% spread(key = cPE, value = Acc)
p3.Acc.swide.exp.2 <- p3.Acc.swide.all.2 %>% filter(Btw==1)
p3.Acc.swide.con.2 <- p3.Acc.swide.all.2 %>% filter(Btw==2)

# summary
p3.Acc.g.all.2 <- p3.Acc.long.all.2 %>%  group_by(Btw, cPE) %>% 
  summarise(Acc.M = mean(Acc), Acc.SD = sd(Acc)) %>% ungroup() 
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p3.Acc.g.all.2$Acc.se <- Rmisc::summarySEwithin(data = p3.Acc.long.all.2, measurevar = "Acc", 
                                                idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$se
p3.Acc.g.all.2$Acc.ci <- Rmisc::summarySEwithin(data = p3.Acc.long.all.2, measurevar = "Acc", 
                                                idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$ci
p3.Acc.g.exp.2 <- p3.Acc.g.all.2 %>% filter(Btw==1)
p3.Acc.g.con.2 <- p3.Acc.g.all.2 %>% filter(Btw==2)
p3.Acc.g.all.2 %>% kable(digits=2)
Btw cPE Acc.M Acc.SD Acc.se Acc.ci
1 pe1 71.88 7.04 2.06 4.88
1 pe2 55.62 14.00 3.23 7.65
1 pe3 61.88 11.93 1.85 4.37
1 pe4 75.00 12.82 2.63 6.23
2 pe1 73.12 13.35 3.70 8.75
2 pe2 73.75 15.75 5.63 13.32
2 pe3 82.50 16.04 4.78 11.31
2 pe4 67.50 11.65 2.59 6.12
## plot
p3.plot2.2.all.2 <- ggplot(p3.Acc.g.all.2, mapping=aes(x=cPE, y=Acc.M, group=Btw)) + 
  geom_ribbon(aes(ymin=Acc.M-Acc.ci, ymax=Acc.M+Acc.ci, fill=Btw), alpha=0.5) + 
  geom_line(p3.Acc.g.all.2, mapping = aes(x=cPE, y=Acc.M, color = Btw), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = cPE, y = Acc.M, ymin=Acc.M, ymax=Acc.M, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("#e69f00", "#56b4e9"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#e69f00", "#56b4e9")) +
  coord_cartesian(ylim = c(30, 100), clip = "on") +
  labs(x = "Prediction Error", y = "List 2 Correct (%)", fill = 'Group') +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 2 Correct Source Memory") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position = "top")
p3.plot2.2.exp.2 <- ggplot(p3.Acc.g.exp.2, mapping=aes(x=cPE, y=Acc.M, group=1)) + 
  geom_ribbon(aes(ymin=Acc.M-Acc.ci, ymax=Acc.M+Acc.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=Acc.M, ymax=Acc.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Acc.long.exp.2, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=Acc, group=SN, color=SN)) +
  geom_point(p3.Acc.long.exp.2, mapping = aes(x=cPE, y=Acc, group=SN, color=SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(30, 100), clip = "on") +
  labs(x = "Prediction Error", y = "List 2 Correct (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3","PE 4")) +
  # ggtitle("List 2 Source Memory (L2>D2; Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
p3.plot2.2.con.2 <- ggplot(p3.Acc.g.con.2, mapping=aes(x=cPE, y=Acc.M, group=1)) + 
  geom_ribbon(aes(ymin=Acc.M-Acc.ci, ymax=Acc.M+Acc.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=Acc.M, ymax=Acc.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Acc.long.con.2, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=Acc, group=SN, color=SN)) +
  geom_point(p3.Acc.long.con.2, mapping = aes(x=cPE, y=Acc, group=SN, color=SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(30, 100), clip = "on") +
  labs(x = "Prediction Error", y = "List 2 Correct (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 2 Source Memory (L2>D2; Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
ggpubr::ggarrange(p3.plot2.2.all.2, p3.plot2.2.exp.2, p3.plot2.2.con.2, ncol=3, labels = c("A) All Group", "B) Experimental", "C) Control")) 


List 2 Correct에 대하여 집단과 예측 오류 조건을 요인으로한 2 X 4 혼합 요인 분산분석을 수행하였다.


p3.Acc2.all.aov <- aov_ez(id = "SN", dv = "Acc", data = p3.Acc.long.all.2, between = "Btw", within = "cPE")
anova(p3.Acc2.all.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 365.513 2.890 0.171 0.111
cPE 2.202 30.834 145.387 2.035 0.127 0.144
Btw:cPE 2.202 30.834 145.387 6.841 0.328 0.003

분석 결과, 집단과 예측 오류의 상호작용이 유의하였다.

p3.Acc2.m1.all <- emmeans(p3.Acc2.all.aov, pairwise ~ cPE | Btw, type = "response")
p3.Acc2.m1.all$contrasts %>% kable(digits = 3)
contrast Btw estimate SE df t.ratio p.value
pe1 - pe2 1 16.250 5.637 14 2.883 0.052
pe1 - pe3 1 10.000 4.454 14 2.245 0.159
pe1 - pe4 1 -3.125 4.139 14 -0.755 0.873
pe2 - pe3 1 -6.250 6.830 14 -0.915 0.797
pe2 - pe4 1 -19.375 5.395 14 -3.592 0.014
pe3 - pe4 1 -13.125 3.949 14 -3.323 0.023
pe1 - pe2 2 -0.625 5.637 14 -0.111 0.999
pe1 - pe3 2 -9.375 4.454 14 -2.105 0.199
pe1 - pe4 2 5.625 4.139 14 1.359 0.543
pe2 - pe3 2 -8.750 6.830 14 -1.281 0.589
pe2 - pe4 2 6.250 5.395 14 1.159 0.661
pe3 - pe4 2 15.000 3.949 14 3.798 0.009
p3.Acc2.m1.all.2 <- emmeans(p3.Acc2.all.aov, pairwise ~ Btw | cPE, type = "response")
p3.Acc2.m1.all.2$contrasts %>% kable(digits = 3)
contrast cPE estimate SE df t.ratio p.value
1 - 2 pe1 -1.250 5.335 14 -0.234 0.818
1 - 2 pe2 -18.125 7.451 14 -2.432 0.029
1 - 2 pe3 -20.625 7.067 14 -2.918 0.011
1 - 2 pe4 7.500 6.124 14 1.225 0.241

사후 분석 결과, 실험 집단에서 PE 1 조건이 PE 2 조건보다 유의하게 높은 List 2 Correct 수준을 보이는 것으로 나타났다. 또한, PE 2보다 PE 4 조건이 더 높은 List 2 Correct을 보였다. 통제 집단에서는 PE 3 조건이 PE 4 조건보다 높은 List 2 Correct 수준을 보였다. 각 예측 오류 조건에서 두 집단 차이를 살펴본 결과, PE 2PE 3에서 통제 집단이 실험 집단보다 우수한 것으로 나타났다.


2.2.1.3.4 목록 2 침범


Intrusion의 집단과 예측 오류 조건에 따른 평균과 표준편차를 계산하였다. 아래의 그래프에서 A는 전체 집단, B는 실험 집단, C는 통제 집단을 나타내며, 빨간 점은 평균, 빨간 리본은 95% 신뢰구간을 나타낸다.


## List 2 Intrusion
# long format
p3.Intru.long.all <- p3 %>% filter(cSrc == "List_2", cPE != "pe0") %>% group_by(SN, Btw, cPE) %>%
  dplyr::summarise(Intrusion = mean(Int)*100) %>% 
  ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p3.Intru.long.exp <- p3.Intru.long.all %>% filter(Btw==1)
p3.Intru.long.con <- p3.Intru.long.all %>% filter(Btw==2)

# wide format
p3.Intru.swide.all <- p3.Intru.long.all %>% spread(key = cPE, value = Intrusion)
p3.Intru.swide.exp <- p3.Intru.swide.all %>% filter(Btw==1)
p3.Intru.swide.con <- p3.Intru.swide.all %>% filter(Btw==2)

# summary
p3.Intru.g.all <- p3.Intru.long.all %>%  group_by(Btw, cPE) %>% 
  dplyr::summarise(Intru.M = mean(Intrusion), Intru.SD = sd(Intrusion)) %>% ungroup() 
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p3.Intru.g.all$Intru.se <- Rmisc::summarySEwithin(data = p3.Intru.long.all, measurevar = "Intrusion", 
                                                  idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$se
p3.Intru.g.all$Intru.ci <- Rmisc::summarySEwithin(data = p3.Intru.long.all, measurevar = "Intrusion", 
                                                  idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$ci
p3.Intru.g.exp <- p3.Intru.g.all %>% filter(Btw==1)
p3.Intru.g.con <- p3.Intru.g.all %>% filter(Btw==2)
p3.Intru.g.all %>% kable(digits=2)
Btw cPE Intru.M Intru.SD Intru.se Intru.ci
1 pe1 24.38 7.29 2.06 4.87
1 pe2 41.25 11.57 3.00 7.09
1 pe3 37.50 12.25 2.34 5.54
1 pe4 23.12 10.67 2.02 4.79
2 pe1 23.12 9.98 2.67 6.32
2 pe2 23.12 14.13 5.43 12.84
2 pe3 16.88 14.62 4.22 9.98
2 pe4 28.75 9.91 2.32 5.48
## plot
p3.plot2.1.all <- ggplot(p3.Intru.g.all, mapping=aes(x=cPE, y=Intru.M, group=Btw)) + 
  geom_ribbon(aes(ymin=Intru.M-Intru.ci, ymax=Intru.M+Intru.ci, fill=Btw), alpha=0.5) + 
  geom_line(p3.Intru.g.all, mapping = aes(x=cPE, y=Intru.M, color = Btw), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = cPE, y = Intru.M, ymin=Intru.M, ymax=Intru.M, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("#e69f00", "#56b4e9"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#e69f00", "#56b4e9")) +
  coord_cartesian(ylim = c(0, 80), clip = "on") +
  labs(x = "Prediction Error", y = "Intrusion (%)", fill = 'Group') +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 2 Intrusion") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position = "top")

p3.plot2.1.exp <- ggplot(p3.Intru.g.exp, mapping=aes(x=cPE, y=Intru.M, group=1)) + 
  geom_ribbon(aes(ymin=Intru.M-Intru.ci, ymax=Intru.M+Intru.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=Intru.M, ymax=Intru.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Intru.long.exp, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=Intrusion, group=SN, color=SN)) +
  geom_point(p3.Intru.long.exp, mapping = aes(x=cPE, y=Intrusion, group=SN, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(0, 80), clip = "on") +
  labs(x = "Prediction Error", y = "Intrusion (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("Intrusion (L2>D1; Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
p3.plot2.1.con <- ggplot(p3.Intru.g.con, mapping=aes(x=cPE, y=Intru.M, group=1)) + 
  geom_ribbon(aes(ymin=Intru.M-Intru.ci, ymax=Intru.M+Intru.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=Intru.M, ymax=Intru.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Intru.long.con, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=Intrusion, group=SN, color=SN)) +
  geom_point(p3.Intru.long.con, mapping = aes(x=cPE, y=Intrusion, group=SN, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(0, 80), clip = "on") +
  labs(x = "Prediction Error", y = "Intrusion (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("Intrusion (L2>D1; Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
ggpubr::ggarrange(p3.plot2.1.all, p3.plot2.1.exp, p3.plot2.1.con, ncol=3, labels = c("A) All Group", "B) Experimental", "C) Control")) 


Intrusion에 대하여 집단과 예측 오류 조건을 요인으로 하는 2 X 4 혼합 요인 분산분석으로 수행하였다.


p3.Intru.all.aov <- aov_ez(id = "SN", dv = "Intrusion", data = p3.Intru.long.all, between = "Btw", within = "cPE")
anova(p3.Intru.all.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 266.685 4.431 0.240 0.054
cPE 1.769 24.769 149.412 2.322 0.142 0.124
Btw:cPE 1.769 24.769 149.412 7.440 0.347 0.004

분석 결과, 집단과 예측 오류 조건의 상호 작용은 유의하였다.

p3.Intru.m1.all <- emmeans(p3.Intru.all.aov, pairwise ~ cPE | Btw, type = "response")
p3.Intru.m1.all$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
pe1 - pe2 1 -16.875 5.258 14 -3.209 0.029
pe1 - pe3 1 -13.125 3.320 14 -3.954 0.007
pe1 - pe4 1 1.250 3.547 14 0.352 0.984
pe2 - pe3 1 3.750 6.731 14 0.557 0.943
pe2 - pe4 1 18.125 4.647 14 3.900 0.008
pe3 - pe4 1 14.375 3.743 14 3.841 0.009
pe1 - pe2 2 0.000 5.258 14 0.000 1.000
pe1 - pe3 2 6.250 3.320 14 1.883 0.279
pe1 - pe4 2 -5.625 3.547 14 -1.586 0.417
pe2 - pe3 2 6.250 6.731 14 0.928 0.790
pe2 - pe4 2 -5.625 4.647 14 -1.210 0.631
pe3 - pe4 2 -11.875 3.743 14 -3.173 0.031
p3.Intru.m2.all <- emmeans(p3.Intru.all.aov, pairwise ~ Btw | cPE, type = "response")
p3.Intru.m2.all$contrasts %>% kable(digits=3)
contrast cPE estimate SE df t.ratio p.value
1 - 2 pe1 1.250 4.369 14 0.286 0.779
1 - 2 pe2 18.125 6.456 14 2.807 0.014
1 - 2 pe3 20.625 6.744 14 3.058 0.009
1 - 2 pe4 -5.625 5.148 14 -1.093 0.293

분석 결과, 실험 집단에서 PE 1PE 2PE 3보다 유의하게 낮은 Intrusion 반응을 보였으나, PE 4와는 유의한 차이를 보이지 않았다. 마찬가지로, PE 4 또한 PE 2PE 3 보다 유의하게 낮은 Intrusion 반응을 보였다. PE 2PE 3 간의 차이는 유의하지 않았다. 통제 집단에서는 모든 비교에서 유의한 차이가 나타나지 않았다.

# contrast coding practice
p3.Intru.long.exp$cPE1 <-factor(p3.Intru.long.exp$cPE, levels = c('pe1','pe2','pe3','pe4'))
# contrasts(p3.Intru.long.exp$cPE1)
contrasts(p3.Intru.long.exp$cPE1) <- contr.poly
# contrasts(p3.Intru.long.exp$cPE1) <- contr.sum
# contrasts(p3.Intru.long.exp$cPE1) <- contr.treatment

contrasts(p3.Intru.long.exp$cPE1)
##             .L   .Q         .C
## pe1 -0.6708204  0.5 -0.2236068
## pe2 -0.2236068 -0.5  0.6708204
## pe3  0.2236068 -0.5 -0.6708204
## pe4  0.6708204  0.5  0.2236068
# contrasts(p3.Intru.long.exp$cPE1) <- cbind(c(-1,1,1,-1))
# MM <- model.matrix( ~ 1 + cPE1, data=p3.Intru.long.exp)
# p3.Intru.long.exp$cPE1cust <- MM[,"cPE11"]

p3.Intru.long.expX <- model.matrix(~ cPE1, data=p3.Intru.long.exp)
p3.Intru.long.exp[,c("cLinear","cQuadratic","cCubic")] <- p3.Intru.long.expX[,2:4]
# p3.Intru.Model <- lmer(Intrusion ~ cPE1 + (1|SN), data=p3.Intru.long.exp)
p3.Intru.Model <- lmer(Intrusion ~ cLinear + cQuadratic + cCubic + (1|SN), data=p3.Intru.long.exp)
# p3.Intru.Model <- lm(Intrusion ~ cPE1, data=p3.Intru.long.exp)
summary(p3.Intru.Model)
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: Intrusion ~ cLinear + cQuadratic + cCubic + (1 | SN)
##    Data: p3.Intru.long.exp
## 
## REML criterion at convergence: 210.8
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.4425 -0.4937  0.1310  0.6076  1.6790 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  SN       (Intercept) 64.06    8.004   
##  Residual             48.66    6.976   
## Number of obs: 32, groups:  SN, 8
## 
## Fixed effects:
##             Estimate Std. Error      df t value   Pr(>|t|)    
## (Intercept)   31.563      3.087   7.000  10.225 0.00001847 ***
## cLinear       -1.677      2.466  21.000  -0.680      0.504    
## cQuadratic   -15.625      2.466  21.000  -6.335 0.00000278 ***
## cCubic         2.236      2.466  21.000   0.907      0.375    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Correlation of Fixed Effects:
##            (Intr) cLiner cQdrtc
## cLinear    0.000               
## cQuadratic 0.000  0.000        
## cCubic     0.000  0.000  0.000
(aovModel <- anova(p3.Intru.Model))
## Type III Analysis of Variance Table with Satterthwaite's method
##            Sum Sq Mean Sq NumDF DenDF F value      Pr(>F)    
## cLinear      22.5    22.5     1    21  0.4624      0.5039    
## cQuadratic 1953.1  1953.1     1    21 40.1376 0.000002784 ***
## cCubic       40.0    40.0     1    21  0.8220      0.3749    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# SumSq contrast
SumSq <- aovModel[1:3,"Sum Sq"]
names(SumSq) <- c("cLinear","cQuadratic","cCubic")
SumSq
##    cLinear cQuadratic     cCubic 
##     22.500   1953.125     40.000
MuMIn::r.squaredGLMM(p3.Intru.Model)
##            R2m       R2c
## [1,] 0.3658092 0.7262305
## ---- echo=TRUE----------------------------------------------------------
# SumSq effect
sum(SumSq)
## [1] 2015.625
# r2 alerting
round(SumSq / sum(SumSq), 2)
##    cLinear cQuadratic     cCubic 
##       0.01       0.97       0.02
p3.Intru.g.exp
## # A tibble: 4 × 6
##   Btw   cPE   Intru.M Intru.SD Intru.se Intru.ci
##   <fct> <fct>   <dbl>    <dbl>    <dbl>    <dbl>
## 1 1     pe1      24.4     7.29     2.06     4.87
## 2 1     pe2      41.2    11.6      3.00     7.09
## 3 1     pe3      37.5    12.2      2.34     5.54
## 4 1     pe4      23.1    10.7      2.02     4.79
mean(p3.Intru.g.exp$Intru.M)
## [1] 31.5625
p3.Intru.Model <- lmer(Intrusion ~ cPE1 + (1|SN), data=p3.Intru.long.exp)
round(summary(p3.Intru.Model)$coef,3)
##             Estimate Std. Error df t value Pr(>|t|)
## (Intercept)   31.563      3.087  7  10.225    0.000
## cPE1.L        -1.677      2.466 21  -0.680    0.504
## cPE1.Q       -15.625      2.466 21  -6.335    0.000
## cPE1.C         2.236      2.466 21   0.907    0.375
anova(p3.Intru.Model)
## Type III Analysis of Variance Table with Satterthwaite's method
##      Sum Sq Mean Sq NumDF DenDF F value     Pr(>F)    
## cPE1 2015.6  671.88     3    21  13.807 0.00003393 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(p3.Intru.emm <- emmeans(p3.Intru.Model, pairwise ~ cPE1))
## $emmeans
##  cPE1 emmean   SE   df lower.CL upper.CL
##  pe1    24.4 3.75 14.2     16.3     32.4
##  pe2    41.2 3.75 14.2     33.2     49.3
##  pe3    37.5 3.75 14.2     29.5     45.5
##  pe4    23.1 3.75 14.2     15.1     31.2
## 
## Degrees-of-freedom method: kenward-roger 
## Confidence level used: 0.95 
## 
## $contrasts
##  contrast  estimate   SE df t.ratio p.value
##  pe1 - pe2   -16.88 3.49 21  -4.838  0.0005
##  pe1 - pe3   -13.12 3.49 21  -3.763  0.0058
##  pe1 - pe4     1.25 3.49 21   0.358  0.9838
##  pe2 - pe3     3.75 3.49 21   1.075  0.7080
##  pe2 - pe4    18.12 3.49 21   5.197  0.0002
##  pe3 - pe4    14.38 3.49 21   4.121  0.0025
## 
## Degrees-of-freedom method: kenward-roger 
## P value adjustment: tukey method for comparing a family of 4 estimates
plot(p3.Intru.emm, horizontal=F, comparisons=T)


2.2.1.3.5 기억 갱신 점수


집단과 예측 오류 조건에 따른 기억 갱신 점수(Updating Score)를 살펴보았다. 기억 갱신 점수(Updating Score)IntrusionSource Confusion의 차이로, 출처 기억 반응에서 IntrusionSource Confusion간의 비대칭적 반응 패턴을 반영하기 위해 구성하였다. 양수의 값은 IntrusionSource Confusion 보다 높은 경우를 나타낸다. 각 집단의 참가자별로 US의 평균과 표준편차를 계산하였다. 아래의 그래프에서 A는 전체 집단, B는 실험 집단, C는 통제 집단을 나타내며, 빨간 점은 평균, 빨간 리본은 95% 신뢰구간을 나타낸다.


## Updating Score
# long format
p3.us <- merge(p3.Intru.long.all, p3.Err.long.all, key=c(SN,cPE))
p3.us <- arrange(p3.us, SN, Btw, cPE)
p3.US.long.all <- p3.us %>% group_by(SN, Btw, cPE) %>% 
  summarise(US = (Intrusion - Error)) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p3.US.long.exp <- p3.US.long.all %>% filter(Btw==1)
p3.US.long.con <- p3.US.long.all %>% filter(Btw==2)

# wide format
p3.US.swide.all <- p3.US.long.all %>% spread(key = cPE, value = US)
p3.US.swide.exp <- p3.US.swide.all %>% filter(Btw==1)
p3.US.swide.con <- p3.US.swide.all %>% filter(Btw==2)

# summary
p3.US.g.all <- p3.US.long.all %>%  group_by(Btw, cPE) %>% 
  summarise(US.M = mean(US), US.SD = sd(US)) %>% ungroup() 
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p3.US.g.all$US.se <- Rmisc::summarySEwithin(data = p3.US.long.all, measurevar = "US", 
                                            idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$se
p3.US.g.all$US.ci <- Rmisc::summarySEwithin(data = p3.US.long.all, measurevar = "US", 
                                            idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$ci
p3.US.g.exp <- p3.US.g.all %>% filter(Btw==1)
p3.US.g.con <- p3.US.g.all %>% filter(Btw==2)
p3.US.g.all %>% kable(digits=2)
Btw cPE US.M US.SD US.se US.ci
1 pe1 -1.88 16.68 3.91 9.25
1 pe2 23.12 9.98 4.19 9.90
1 pe3 22.50 16.90 4.95 11.70
1 pe4 8.12 13.35 2.84 6.71
2 pe1 -3.12 14.62 4.06 9.60
2 pe2 3.75 12.46 5.16 12.21
2 pe3 -0.63 17.20 5.70 13.49
2 pe4 16.88 7.99 3.17 7.51
## plot
p3.plot2.5.all <- ggplot(p3.US.g.all, mapping=aes(x=cPE, y=US.M, group=Btw)) + 
  geom_ribbon(aes(ymin=US.M-US.ci, ymax=US.M+US.ci, fill=Btw), alpha=0.5) + 
  geom_line(p3.US.g.all, mapping = aes(x=cPE, y=US.M, color = Btw), size = 1, show.legend = FALSE) +
  geom_pointrange(aes(x = cPE, y = US.M, ymin=US.M, ymax=US.M, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  scale_fill_manual(values = c("#e69f00", "#56b4e9"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#e69f00", "#56b4e9")) +
  coord_cartesian(ylim = c(-50, 50), clip = "on") +
  labs(x = "Prediction Error", y = "US value", fill = 'Group') +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("Update Score") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position = "top")
p3.plot2.5.exp <- ggplot(p3.US.g.exp, mapping=aes(x=cPE, y=US.M, group=1)) + 
  geom_ribbon(aes(ymin=US.M-US.ci, ymax=US.M+US.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=US.M, ymax=US.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.US.long.exp, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=US, group=SN, color=SN)) +
  geom_point(p3.US.long.exp, mapping = aes(x=cPE, y=US, group=SN, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(-50, +50), clip = "on") +
  labs(x = "Prediction Error", y = "US value") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("Updating Score (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
p3.plot2.5.con <- ggplot(p3.US.g.con, mapping=aes(x=cPE, y=US.M, group=1)) + 
  geom_ribbon(aes(ymin=US.M-US.ci, ymax=US.M+US.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=US.M, ymax=US.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.US.long.con, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=US, group=SN, color=SN)) +
  geom_point(p3.US.long.con, mapping = aes(x=cPE, y=US, group=SN, color = SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(-50, +50), clip = "on") +
  labs(x = "Prediction Error", y = "US valus") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("Updating Score (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
ggpubr::ggarrange(p3.plot2.5.all, p3.plot2.5.exp, p3.plot2.5.con, ncol=3, labels = c("A) All Group", "B) Experimental", "C) Control")) 


각 집단과 예측 오류 조건에서의 US 차이를 살펴보기 위하여 2 X 4 혼합 요인 분산분석을 수행하였다.

p3.US.all.aov <- aov_ez(id = "SN", dv = "US", data = p3.US.long.all, between = "Btw", within = "cPE")
anova(p3.US.all.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 301.674 4.061 0.225 0.064
cPE 2.072 29.005 233.421 5.535 0.283 0.009
Btw:cPE 2.072 29.005 233.421 5.641 0.287 0.008

분석 결과, 예측 오류의 주효과와 집단과 예측 오류 간의 상호작용이 유의하였다.

p3.US.m1.all <- emmeans(p3.US.all.aov, pairwise ~ cPE | Btw, type = "response")
p3.US.m1.all$contrasts %>% kable(digits = 3)
contrast Btw estimate SE df t.ratio p.value
pe1 - pe2 1 -25.000 5.258 14 -4.754 0.002
pe1 - pe3 1 -24.375 7.333 14 -3.324 0.023
pe1 - pe4 1 -10.000 5.469 14 -1.828 0.301
pe2 - pe3 1 0.625 8.422 14 0.074 1.000
pe2 - pe4 1 15.000 5.706 14 2.629 0.083
pe3 - pe4 1 14.375 5.194 14 2.767 0.064
pe1 - pe2 2 -6.875 5.258 14 -1.307 0.573
pe1 - pe3 2 -2.500 7.333 14 -0.341 0.986
pe1 - pe4 2 -20.000 5.469 14 -3.657 0.012
pe2 - pe3 2 4.375 8.422 14 0.519 0.953
pe2 - pe4 2 -13.125 5.706 14 -2.300 0.145
pe3 - pe4 2 -17.500 5.194 14 -3.369 0.021
p3.US.m2.all <- emmeans(p3.US.all.aov, pairwise ~ Btw | cPE, type = "response")
p3.US.m2.all$contrasts %>% kable(digits = 3)
contrast cPE estimate SE df t.ratio p.value
1 - 2 pe1 1.250 7.842 14 0.159 0.876
1 - 2 pe2 19.375 5.645 14 3.432 0.004
1 - 2 pe3 23.125 8.527 14 2.712 0.017
1 - 2 pe4 -8.750 5.500 14 -1.591 0.134

사후 분석 결과, 실험 집단에서 PE 1보다 PE 2, PE 3이 유의하게 높은 US값을 보였다. 다른 차이는 유의하지 않았다. 통제 집단에서는 PE 1PE 3보다 PE 4가 유의하게 높은 US값을 보였다. 또한 PE 2, PE 3 조건에서 실험 집단은 통제 집단보다 유의하게 높은 US값을 보였다.



2.2.2 Day 3 연합 기억 정확도


이러한 결과가 기억의 손상에 의한 것이 아닌 갱신에 의한 것이라는 점을 확인하기 위해서는 목록 1과 목록 2의 연합 기억이 어느 정도 유지되어 있어야 한다. 또한 본 실험에서 유도한 재공고화, 예측 오류를 수반한 재활성화가 출처 기억 뿐만 아니라 연합 기억에도 영향을 준다면, 각 조건에 따라 일정한 패턴을 확인할 수 있을 것이다. 따라서 집단, 출처 반응, 예측 오류 조건에서의 연합 기억 정확도를 분석하였다. 기억 검사 과제에서 New로 출처 반응을 한 경우에는 연합 기억 검사를 생략하였으므로, List 3과 관련된 연합 기억은 분석할 수 없었다.


2.2.2.1 집단과 목록에 따른 연합 기억 정확도


첫째 날과 둘째 날의 연합 기억 학습 수행을 비교한 분석에서는 둘째 날 연합 기억 학습이 첫째 날 연합 기억 학습보다 우수하게 나타났었다. 이러한 결과 패턴이 마지막 날의 연합 기억 검사에서도 유사하게 나타나는지 확인하였다. 또한 두 집단 간의 연합 기억 수행의 차이가 있는지도 확인하였다.


# long format
p3.day.Asc.long.all <- p3 %>% filter(cSrc != "List_3", Resp != "New") %>% group_by(SN, Btw, cSrc) %>% 
  summarise(aCorr = mean(aCorr)*100) %>% ungroup
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p3.day.Asc.long.exp <- p3.day.Asc.long.all %>% filter(Btw==1)
p3.day.Asc.long.con <- p3.day.Asc.long.all %>% filter(Btw==2)

# wide format
p3.day.Asc.swide.all <- p3.day.Asc.long.all %>% spread(key = cSrc, value = aCorr)
p3.day.Asc.swide.exp <- p3.day.Asc.swide.all %>% filter(Btw==1)
p3.day.Asc.swide.con <- p3.day.Asc.swide.all %>% filter(Btw==2)

# summary
p3.day.Asc.g.all <- p3.day.Asc.long.all %>% group_by(Btw, cSrc) %>% 
  summarise(aCorr.M = mean(aCorr), aCorr.SD = sd(aCorr)) %>% ungroup()
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p3.day.Asc.g.all$aCorr.se <- Rmisc::summarySEwithin(data = p3.day.Asc.long.all, measurevar = "aCorr", 
                                                    idvar = "SN", betweenvars = "Btw", withinvars = "cSrc")$se
p3.day.Asc.g.all$aCorr.ci <- Rmisc::summarySEwithin(data = p3.day.Asc.long.all, measurevar = "aCorr", 
                                                    idvar = "SN", betweenvars = "Btw", withinvars = "cSrc")$ci  
p3.day.Asc.g.exp <- p3.day.Asc.g.all %>% filter(Btw==1)
p3.day.Asc.g.con <- p3.day.Asc.g.all %>% filter(Btw==2)
p3.day.Asc.g.all %>% kable(digits=2)
Btw cSrc aCorr.M aCorr.SD aCorr.se aCorr.ci
1 List_1 90.34 3.80 0.96 2.27
1 List_2 94.22 4.10 0.96 2.27
2 List_1 83.60 11.89 1.56 3.70
2 List_2 90.58 6.67 1.56 3.70
## plot
p3.day.Asc.all.plot.1 <- ggplot(data=p3.day.Asc.long.all, aes(x=Btw, y=aCorr, fill=cSrc)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .7, width = .65, colour="black", size = 1.02) +
  geom_point(position=position_dodge(0.65), aes(x=Btw, y=aCorr, group=cSrc, color=SN), size = 3, alpha = .4, show.legend = FALSE) +
  geom_segment(data=filter(p3.day.Asc.swide.all,Btw==1), inherit.aes = FALSE,
               aes(x=1-.16, y=filter(p3.day.Asc.swide.all,Btw==1)$"List_1",
                   xend=1+.16, yend=filter(p3.day.Asc.swide.all,Btw==1)$"List_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.day.Asc.swide.all,Btw==2), inherit.aes = FALSE,
               aes(x=2-.16, y=filter(p3.day.Asc.swide.all,Btw==2)$"List_1",
                   xend=2+.16, yend=filter(p3.day.Asc.swide.all,Btw==2)$"List_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_pointrange(data=p3.day.Asc.g.all, aes(x = Btw, y = aCorr.M, ymin = aCorr.M-aCorr.ci, ymax = aCorr.M+aCorr.ci),
                  position = position_dodge(0.65), color = "darkred", size = 1, show.legend = FALSE) +
  scale_fill_manual(values = c("#feb24c", "#91bfdb"),
                    labels = c("List 1", "List 2")) +
  scale_x_discrete(labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(25, 100), clip = "on") +
  labs(x = "Group", y = "Accuracy (%)", fill ="Object List") +
  # ggtitle("Association Memory by Group") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        legend.position="top")

p3.day.Asc.all.plot.2 <- ggplot(data=p3.day.Asc.long.all, aes(x=cSrc, y=aCorr, fill=Btw)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .7, width = .65, colour="black", size = 1.02) +
  geom_point(position=position_dodge(0.65), aes(x=cSrc, y=aCorr, group=Btw, color=SN), size = 3, alpha = .4, show.legend = FALSE) +
  geom_pointrange(data=p3.day.Asc.g.all, aes(x = cSrc, y = aCorr.M, ymin = aCorr.M-aCorr.ci, ymax = aCorr.M+aCorr.ci),
                  position = position_dodge(0.65), color = "darkred", size = 1, show.legend = FALSE) +
  scale_fill_manual(values = c("#feb24c", "#91bfdb"),
                    labels = c("Experimental", "Control")) +
  scale_x_discrete(labels = c("List 1", "List 2")) +
  coord_cartesian(ylim = c(25, 100), clip = "on") +
  labs(x = "Object List", y = "Accuracy (%)", fill ="Group") +
  # ggtitle("Association Memory by Object List") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        legend.position="top")

ggpubr::ggarrange(p3.day.Asc.all.plot.1, p3.day.Asc.all.plot.2, ncol = 2, labels=c("A) Association Memory by Group","B) Association Memory by List"))

집단과 물체 목록을 요인으로 하는 2 X 2 혼합 요인 분산분석을 수행하였다.

p3.day.Asc.all.aov <- aov_ez(id = "SN", dv = "aCorr", data = p3.day.Asc.long.all, between = "Btw", within = c("cSrc"))
anova(p3.day.Asc.all.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1 14 90.629 2.382 0.145 0.145
cSrc 1 14 17.974 13.131 0.484 0.003
Btw:cSrc 1 14 17.974 1.072 0.071 0.318

분석 결과, 물체 목록의 주효과는 유의하였다.

p3.day.Asc.m1.all <- emmeans(p3.day.Asc.all.aov, pairwise ~ cSrc | Btw, type = "response")
p3.day.Asc.m1.all$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
List_1 - List_2 1 -3.879 2.12 14 -1.830 0.089
List_1 - List_2 2 -6.984 2.12 14 -3.295 0.005
p3.day.Asc.m2.all <- emmeans(p3.day.Asc.all.aov, pairwise ~ Btw | cSrc, type = "response")
p3.day.Asc.m2.all$contrasts %>% kable(digits=3)
contrast cSrc estimate SE df t.ratio p.value
1 - 2 List_1 6.747 4.415 14 1.528 0.149
1 - 2 List_2 3.643 2.768 14 1.316 0.209

각 집단 별로 물체 목록에 대한 사후 분석을 수행한 결과, 통제 집단에서 목록 2가 목록 1보다 우수한 연합 기억 수행을 보였다.


2.2.2.2 출처 반응에 따른 연합 기억 정확도


집단, 물체 목록에서 출처 반응에 따라 연합 기억이 어떻게 나타나는지 살펴보기 위해, 각 조건에 대한 연합 기억 정확도 평균과 표준편차를 계산하였다. 아래의 그래프에서 A는 전체 집단, B, C는 각 집단을 나타내며, 빨간 점은 평균, 오차 막대는 95% 신뢰구간을 표시한다.


# long format
p3.AsyPtt.Asc.long.all <- p3 %>% filter(cSrc != "List_3", Resp != "New") %>% group_by(SN, Btw, cSrc, Resp) %>%
  summarise(aCorr = mean(aCorr)*100) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'Btw', 'cSrc'. You can override using the `.groups` argument.
p3.AsyPtt.Asc.wide.all <- p3.AsyPtt.Asc.long.all %>% spread(key = Resp, value = aCorr)
p3.AsyPtt.Asc.long.all <- gather(p3.AsyPtt.Asc.wide.all, Resp, aCorr, Day_1:Day_2, factor_key=TRUE)
p3.AsyPtt.Asc.long.all[is.na(p3.AsyPtt.Asc.long.all)] <- 0 
p3.AsyPtt.Asc.long.all <- arrange(p3.AsyPtt.Asc.long.all, SN, cSrc, Resp, aCorr)
p3.AsyPtt.Asc.long.exp <- p3.AsyPtt.Asc.long.all %>% filter(Btw==1)
p3.AsyPtt.Asc.long.con <- p3.AsyPtt.Asc.long.all %>% filter(Btw==2)

# wide format
p3.AsyPtt.Asc.swide.all <- p3.AsyPtt.Asc.long.all %>% spread(key = Resp, value = aCorr)
p3.AsyPtt.Asc.swide.exp <- p3.AsyPtt.Asc.swide.all %>% filter(Btw==1)
p3.AsyPtt.Asc.swide.con <- p3.AsyPtt.Asc.swide.all %>% filter(Btw==2)

# summary
p3.AsyPtt.Asc.g.all <- p3.AsyPtt.Asc.long.all %>% group_by(Btw, cSrc, Resp) %>% 
  summarise(aCorr.M = mean(aCorr), aCorr.SD = sd(aCorr)) %>% ungroup()
## `summarise()` has grouped output by 'Btw', 'cSrc'. You can override using the `.groups` argument.
p3.AsyPtt.Asc.g.all$aCorr.se <- Rmisc::summarySEwithin(data = p3.AsyPtt.Asc.long.all, measurevar = "aCorr", 
                                                       idvar = "SN", betweenvars = "Btw", withinvars = c("cSrc","Resp"))$se
p3.AsyPtt.Asc.g.all$aCorr.ci <- Rmisc::summarySEwithin(data = p3.AsyPtt.Asc.long.all, measurevar = "aCorr", 
                                                       idvar = "SN", betweenvars = "Btw", withinvars = c("cSrc","Resp"))$ci  
p3.AsyPtt.Asc.g.exp <- p3.AsyPtt.Asc.g.all %>% filter(Btw==1)
p3.AsyPtt.Asc.g.con <- p3.AsyPtt.Asc.g.all %>% filter(Btw==2)
p3.AsyPtt.Asc.g.all %>% kable(digits=2)
Btw cSrc Resp aCorr.M aCorr.SD aCorr.se aCorr.ci
1 List_1 Day_1 90.25 4.23 1.20 2.83
1 List_1 Day_2 88.05 12.59 4.32 10.21
1 List_2 Day_1 91.55 7.17 2.92 6.91
1 List_2 Day_2 96.17 4.28 1.49 3.51
2 List_1 Day_1 84.28 10.80 2.00 4.72
2 List_1 Day_2 80.11 20.46 3.63 8.58
2 List_2 Day_1 89.21 12.53 1.76 4.16
2 List_2 Day_2 91.27 5.25 3.09 7.31
## plot
p3.Asc.all.plot3 <- ggplot(data=p3.AsyPtt.Asc.long.all, aes(x=Resp, y=aCorr, fill=Btw)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .9, width = 0.8, colour="black", size = 1.02) +
  geom_pointrange(data=p3.AsyPtt.Asc.g.all, aes(x = Resp, y=aCorr.M, ymin = aCorr.M - aCorr.ci, ymax = aCorr.M + aCorr.ci),
                  position = position_dodge(0.80), color = "darkred", size = 1, show.legend = FALSE) +
  facet_grid(.~cSrc, scales="free_x", 
             labeller = labeller(cSrc = c("List_1" = "List 1 (Day 1)","List_2" = "List 2 (Day 2)"))) +
  scale_x_discrete(labels=c("Day 1", "Day 2")) +
  scale_fill_manual(values = c("#feb24c", "#91bfdb"),
                    labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(0, 105), clip = "on") +
  labs(x = "Source Response by Object List", y = "Association Accuracy (%)", fill ="Group") +
  # ggtitle("Association Memory Response") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        # plot.title = element_text(hjust = 0.5),
        legend.position="top")
p3.Asc.exp.plot3 <- ggplot(data=p3.AsyPtt.Asc.long.exp, aes(x=cSrc, y=aCorr, fill=Resp)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .7, width = .65, colour="black", size = 1.02) +
  geom_point(position=position_dodge(0.65), aes(x=cSrc, y=aCorr, group=Resp, color=SN), size = 3, alpha = .4, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.Asc.swide.exp,cSrc=="List_1"), inherit.aes = FALSE,
               aes(x=1-.16, y=filter(p3.AsyPtt.Asc.swide.exp,cSrc=="List_1")$"Day_1",
                   xend=1+.16, yend=filter(p3.AsyPtt.Asc.swide.exp,cSrc=="List_1")$"Day_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.Asc.swide.exp,cSrc=="List_2"), inherit.aes = FALSE,
               aes(x=2-.16, y=filter(p3.AsyPtt.Asc.swide.exp,cSrc=="List_2")$"Day_1",
                   xend=2+.16, yend=filter(p3.AsyPtt.Asc.swide.exp,cSrc=="List_2")$"Day_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_pointrange(data=p3.AsyPtt.Asc.g.exp, aes(x = cSrc, y = aCorr.M, ymin = aCorr.M-aCorr.ci, ymax = aCorr.M+aCorr.ci),
                  position = position_dodge(0.65), color = "darkred", size = 1, show.legend = FALSE) +
  scale_fill_manual(values = c("#56b4e9", "#e69f00", "#ff6164"),
                    labels = c("Day 1", "Day 2")) +
  scale_x_discrete(labels = c("List 1", "List 2")) +
  coord_cartesian(ylim = c(25, 100), clip = "on") +
  labs(x = "Object List", y = "Association Accuracy (%)", fill ="Attribution") +
  # ggtitle("Association Memory (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        legend.position="top")
p3.Asc.con.plot3 <- ggplot(data=p3.AsyPtt.Asc.long.con, aes(x=cSrc, y=aCorr, fill=Resp)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .7, width = .65, colour="black", size = 1.02) +
  geom_point(position=position_dodge(0.65), aes(x=cSrc, y=aCorr, group=Resp, color=SN), size = 3, alpha = .4, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.Asc.swide.con,cSrc=="List_1"), inherit.aes = FALSE,
               aes(x=1-.16, y=filter(p3.AsyPtt.Asc.swide.con,cSrc=="List_1")$"Day_1",
                   xend=1+.16, yend=filter(p3.AsyPtt.Asc.swide.con,cSrc=="List_1")$"Day_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_segment(data=filter(p3.AsyPtt.Asc.swide.con,cSrc=="List_2"), inherit.aes = FALSE,
               aes(x=2-.16, y=filter(p3.AsyPtt.Asc.swide.con,cSrc=="List_2")$"Day_1",
                   xend=2+.16, yend=filter(p3.AsyPtt.Asc.swide.con,cSrc=="List_2")$"Day_2", color=SN),
               size = 1, alpha = 0.3, show.legend = FALSE) +
  geom_pointrange(data=p3.AsyPtt.Asc.g.con, aes(x = cSrc, y = aCorr.M, ymin = aCorr.M-aCorr.ci, ymax = aCorr.M+aCorr.ci),
                  position = position_dodge(0.65), color = "darkred", size = 1, show.legend = FALSE) +
  scale_fill_manual(values = c("#56b4e9", "#e69f00", "#ff6164"),
                    labels = c("Day 1", "Day 2")) +
  scale_x_discrete(labels = c("List 1", "List 2")) +
  coord_cartesian(ylim = c(25, 100), clip = "on") +
  labs(x = "Object List", y = "Association Accuracy (%)", fill ="Attribution") +
  # ggtitle("Association Memory (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"), 
        legend.position="top")
ggpubr::ggarrange(p3.Asc.all.plot3, labels = "A) All Group",
          ggpubr::ggarrange(p3.Asc.exp.plot3, p3.Asc.con.plot3, ncol = 2, labels = c("B) Experimental", "C) Control")), 
          nrow = 2)


2.2.2.2.1 목록 1, 목록 2의 출처 반응에 따른 연합 기억 정확도


List 1, List 2 에서 집단과 출처 반응에 따른 연합 기억 정확도의 차이를 분석하였다. 참가자 간 변인인 집단과 참가자 내 변인인 출처 반응을 요인으로 한 2 X 2 혼합 요인 분산분석을 수행하였다.

# List 1 & 2 Association Memory by Source Response
p3.AsyPtt.Asc.long.all.1 <- p3.AsyPtt.Asc.long.all %>% unite(cSrc_Resp, cSrc:Resp, remove=FALSE) %>% 
  rename(sResp = "cSrc_Resp") 
p3.AsyPtt.Asc.long.all.1$sResp <- factor(p3.AsyPtt.Asc.long.all.1$sResp)
# p3.AsyPtt.Asc.long.all.1 <- p3.AsyPtt.Asc.long.all.1 %>% filter(sResp %in% c("List_1_Day_1", "List_2_Day_2"))
# p3.AsyPtt.Asc.long.all.1 %>% kable(digits=3)

p3.AsyPtt.Asc.g.all.1 <- p3.AsyPtt.Asc.long.all.1 %>% group_by(Btw, sResp) %>%
  summarise(aCorr.M = mean(aCorr), aCorr.SD = sd(aCorr)) %>% ungroup()
p3.AsyPtt.Asc.g.all.1$aCorr <- p3.AsyPtt.Asc.g.all.1$aCorr.M
p3.AsyPtt.Asc.g.all.1$aCorr.se <- Rmisc::summarySEwithin(data = p3.AsyPtt.Asc.long.all.1, idvar = "SN",
                                                         measurevar = "aCorr", betweenvars = "Btw", withinvars = "sResp")$se
p3.AsyPtt.Asc.g.all.1$aCorr.ci <- Rmisc::summarySEwithin(data = p3.AsyPtt.Asc.long.all.1, idvar = "SN",
                                                         measurevar = "aCorr", betweenvars = "Btw", withinvars = "sResp")$ci
p3.AsyPtt.Asc.g.all.1 %>% kable(digits=2)
Btw sResp aCorr.M aCorr.SD aCorr aCorr.se aCorr.ci
1 List_1_Day_1 90.25 4.23 90.25 1.26 2.98
1 List_1_Day_2 88.05 12.59 88.05 4.55 10.76
1 List_2_Day_1 91.55 7.17 91.55 3.08 7.29
1 List_2_Day_2 96.17 4.28 96.17 1.57 3.70
2 List_1_Day_1 84.28 10.80 84.28 2.10 4.97
2 List_1_Day_2 80.11 20.46 80.11 3.83 9.05
2 List_2_Day_1 89.21 12.53 89.21 1.86 4.39
2 List_2_Day_2 91.27 5.25 91.27 3.26 7.71
p3.AsyPtt.Asc.all.1.aov <- aov_ez(id = "SN", dv = "aCorr", data = p3.AsyPtt.Asc.long.all.1, between = "Btw", within = "sResp")
anova(p3.AsyPtt.Asc.all.1.aov, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 280.847 1.591 0.102 0.228
sResp 1.812 25.374 111.554 4.061 0.225 0.033
Btw:sResp 1.812 25.374 111.554 0.323 0.023 0.706

분석 결과, 출처 반응의 주효과가 유의하였다.

p3.AsyPtt.Asc.m1.1.all <- emmeans(p3.AsyPtt.Asc.all.1.aov, pairwise ~ sResp | Btw, type = "response")
p3.AsyPtt.Asc.m1.1.all$contrasts %>% kable(digits=3)
contrast Btw estimate SE df t.ratio p.value
List_1_Day_1 - List_1_Day_2 1 2.209 4.693 14 0.471 0.964
List_1_Day_1 - List_2_Day_1 1 -1.298 2.625 14 -0.495 0.959
List_1_Day_1 - List_2_Day_2 1 -5.912 2.320 14 -2.548 0.095
List_1_Day_2 - List_2_Day_1 1 -3.507 5.223 14 -0.671 0.906
List_1_Day_2 - List_2_Day_2 1 -8.121 5.386 14 -1.508 0.459
List_2_Day_1 - List_2_Day_2 1 -4.614 3.241 14 -1.423 0.506
List_1_Day_1 - List_1_Day_2 2 4.167 4.693 14 0.888 0.811
List_1_Day_1 - List_2_Day_1 2 -4.932 2.625 14 -1.879 0.280
List_1_Day_1 - List_2_Day_2 2 -6.991 2.320 14 -3.013 0.041
List_1_Day_2 - List_2_Day_1 2 -9.099 5.223 14 -1.742 0.340
List_1_Day_2 - List_2_Day_2 2 -11.158 5.386 14 -2.072 0.210
List_2_Day_1 - List_2_Day_2 2 -2.059 3.241 14 -0.635 0.919
p3.AsyPtt.Asc.m1.2.all <- emmeans(p3.AsyPtt.Asc.all.1.aov, pairwise ~ Btw | sResp, type = "response")
p3.AsyPtt.Asc.m1.2.all$contrasts %>% kable(digits=3)
contrast sResp estimate SE df t.ratio p.value
1 - 2 List_1_Day_1 5.974 4.101 14 1.457 0.167
1 - 2 List_1_Day_2 7.932 8.495 14 0.934 0.366
1 - 2 List_2_Day_1 2.340 5.103 14 0.459 0.654
1 - 2 List_2_Day_2 4.895 2.394 14 2.045 0.060

출처 반응에 따른 사후 분석을 수행한 결과, 통제 집단의 List 2 Correct의 연합 기억은 Source Confusion 보다 유의하게 높은 연합 기억 정확도를 보였다. 이 외에 다른 비교들은 유의하지 않았다. 각 출처 반응에서 집단 간의 차이에 대한 사후 분석 결과, 모든 비교에서 유의한 차이가 나타나지 않았다.


2.2.2.3 예측 오류 정도에 따른 연합 기억 정확도


집단, 예측 오류 조건에 따른 연합 기억 정확도가 예측 오류 수준에 따라 다른지 살펴보기 위한 분석을 수행하였다. 출처 기억 확신도 분석과 유사하게 각 출처 반응을 예측 오류 조건으로 구분하였을 때 시행수가 충분하지 않은 경우에는 연합 기억 정확도의 평균이 대표성을 가지지 못할 수 있다. 따라서 각 출처 반응에서의 시행수를 확인하였다.

# The number of trials per condition
p3 %>% filter(cSrc!="List_3", Resp!="New") %>% 
  group_by(SN, cSrc, Resp, cPE) %>% 
  summarise(NumTrial = length(aResp)) %>% 
  ungroup %>% 
  group_by(cSrc, Resp, cPE) %>%
  summarise(Avg = mean(NumTrial), 
            Med = median(NumTrial), 
            Min = min(NumTrial), 
            Max = max(NumTrial)) %>% 
  ungroup %>% kable(digits=3)
## `summarise()` has grouped output by 'SN', 'cSrc', 'Resp'. You can override using the `.groups` argument.
## `summarise()` has grouped output by 'cSrc', 'Resp'. You can override using the `.groups` argument.
cSrc Resp cPE Avg Med Min Max
List_1 Day_1 pe1 14.500 15.0 8 18
List_1 Day_1 pe2 15.625 16.0 13 18
List_1 Day_1 pe3 15.938 15.5 12 19
List_1 Day_1 pe4 16.625 17.0 12 19
List_1 Day_2 pe1 5.250 5.0 2 11
List_1 Day_2 pe2 3.750 3.0 1 7
List_1 Day_2 pe3 3.467 4.0 1 6
List_1 Day_2 pe4 3.071 2.5 1 7
List_2 Day_1 pe1 4.750 4.5 2 8
List_2 Day_1 pe2 6.438 6.0 2 13
List_2 Day_1 pe3 5.800 6.0 1 12
List_2 Day_1 pe4 5.188 5.0 2 9
List_2 Day_2 pe1 14.500 15.0 9 18
List_2 Day_2 pe2 12.938 13.0 5 17
List_2 Day_2 pe3 14.438 13.5 8 20
List_2 Day_2 pe4 14.250 14.0 10 18

각 출처 반응의 시행수에서 Source Confusion, Intrusion은 각 예측 오류 조건에서 평균 시행수가 10시행에 미치지 못하므로 분석에서 제외하였다. 따라서 출처 반응의 종속 변인 중 List 1 Correct, List 2 Correct에서 집단과 예측 오류 조건에 따른 차이를 비교하였다.


2.2.2.3.1 목록 1 정확반응에서의 연합 기억 정확도


List 1 Correct 출처 반응에서 집단과 예측 오류 조건에 따라 연합 기억 수준이 다른지 살펴보았다. 각 조건의 평균과 표준편차를 계산하였다. 아래의 그래프에서 A는 전체 집단, B는 실험 집단, C는 통제 집단을 나타내며, 빨간 점은 평균, 빨간 리본은 95% 신뢰구간을 나타낸다.


## List 1 Association Memory of Correct Response
# long format
p3.Acc.Asc.long.all.1 <- p3 %>% filter(cPE != "pe0", Correct == 1, cSrc == "List_1") %>% group_by(SN, Btw, cPE) %>% 
  summarise(aCorr = mean(aCorr)*100) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p3.Acc.Asc.long.exp.1 <- p3.Acc.Asc.long.all.1 %>% filter(Btw==1)
p3.Acc.Asc.long.con.1 <- p3.Acc.Asc.long.all.1 %>% filter(Btw==2)

# wide format
p3.Acc.Asc.swide.all.1 <- p3.Acc.Asc.long.all.1 %>% spread(key = cPE, value = aCorr)
p3.Acc.Asc.swide.exp.1 <- p3.Acc.Asc.swide.all.1 %>% filter(Btw==1)
p3.Acc.Asc.swide.con.1 <- p3.Acc.Asc.swide.all.1 %>% filter(Btw==2)

# summary
p3.Acc.Asc.g.all.1 <- p3.Acc.Asc.long.all.1 %>%  group_by(Btw, cPE) %>% 
  summarise(aCorr.M = mean(aCorr), aCorr.SD = sd(aCorr)) %>% ungroup() 
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p3.Acc.Asc.g.all.1$aCorr.se <- Rmisc::summarySEwithin(data = p3.Acc.Asc.long.all.1, measurevar = "aCorr", 
                                                      idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$se
p3.Acc.Asc.g.all.1$aCorr.ci <- Rmisc::summarySEwithin(data = p3.Acc.Asc.long.all.1, measurevar = "aCorr", 
                                                      idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$ci
p3.Acc.Asc.g.exp.1 <- p3.Acc.Asc.g.all.1 %>% filter(Btw==1)
p3.Acc.Asc.g.con.1 <- p3.Acc.Asc.g.all.1 %>% filter(Btw==2)
p3.Acc.Asc.g.all.1 %>% kable(digits=2)
Btw cPE aCorr.M aCorr.SD aCorr.se aCorr.ci
1 pe1 96.66 5.05 1.81 4.27
1 pe2 86.80 9.10 2.36 5.58
1 pe3 90.41 7.16 3.01 7.11
1 pe4 87.53 10.29 3.56 8.41
2 pe1 81.23 21.42 5.42 12.81
2 pe2 82.37 16.91 4.29 10.14
2 pe3 82.81 14.92 4.10 9.70
2 pe4 89.05 9.26 4.34 10.25
## plot

p3.Asc.all.plot4.2.1 <- ggplot(p3.Acc.Asc.g.all.1, mapping=aes(x=cPE, y=aCorr.M, group=Btw)) + 
  geom_ribbon(aes(ymin=aCorr.M-aCorr.ci, ymax=aCorr.M+aCorr.ci, fill=Btw), alpha=0.5) +
  geom_line(p3.Acc.Asc.g.all.1, mapping=aes(x=cPE, y=aCorr.M, color=Btw), size =1, show.legend = FALSE) +
  geom_pointrange(aes(x = cPE, ymin=aCorr.M, ymax=aCorr.M, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  coord_cartesian(ylim = c(20, 100), clip = "on") +
  scale_fill_manual(values = c("#e69f00", "#56b4e9"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#e69f00", "#56b4e9")) + 
  labs(x = "Prediction Error", y = "Association Accuracy (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 1 AM of Correct Source (All Group)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position = "top")
p3.Asc.exp.plot4.2.1 <- ggplot(p3.Acc.Asc.g.exp.1, mapping=aes(x=cPE, y=aCorr.M, group=1)) + 
  geom_ribbon(aes(ymin=aCorr.M-aCorr.ci, ymax=aCorr.M+aCorr.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=aCorr.M, ymax=aCorr.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Acc.Asc.long.exp.1, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=aCorr, group=SN, color=SN)) +
  geom_point(p3.Acc.Asc.long.exp.1, mapping = aes(x=cPE, y=aCorr, color=SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(20, 100), clip = "on") +
  labs(x = "Prediction Error", y = "Association Accuracy (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 1 AM of Correct Source (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
p3.Asc.con.plot4.2.1 <- ggplot(p3.Acc.Asc.g.con.1, mapping=aes(x=cPE, y=aCorr.M, group=1)) + 
  geom_ribbon(aes(ymin=aCorr.M-aCorr.ci, ymax=aCorr.M+aCorr.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=aCorr.M, ymax=aCorr.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Acc.Asc.long.con.1, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=aCorr, group=SN, color=SN)) +
  geom_point(p3.Acc.Asc.long.con.1, mapping = aes(x=cPE, y=aCorr, color=SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(20, 100), clip = "on") +
  labs(x = "Prediction Error", y = "Association Accuracy (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 1 AM of Correct Source (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
ggpubr::ggarrange(p3.Asc.all.plot4.2.1,p3.Asc.exp.plot4.2.1, p3.Asc.con.plot4.2.1, ncol=3, labels=c("A) All Group", "B) Experimental", "C) Control"))


집단과 예측 오류 조건을 요인으로 2 X 4 혼합 요인 분산분석을 수행하였다.


p3.Acc.all.aov.Asc.1 <- aov_ez(id = "SN", dv = "aCorr", data = p3.Acc.Asc.long.all.1, between = "Btw", within = "cPE")
anova(p3.Acc.all.aov.Asc.1, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 294.676 2.281 0.140 0.153
cPE 2.273 31.825 160.337 0.500 0.034 0.635
Btw:cPE 2.273 31.825 160.337 1.641 0.105 0.207

분석 결과, 모든 효과가 유의하지 않았다.


2.2.2.3.2 목록 2 정확반응에서의 연합 기억 정확도


List 2 Correct 출처 반응에서 집단과 예측 오류 조건에 따라 연합 기억 수준이 다른지 살펴보았다. 각 조건의 평균과 표준편차를 계산하였다. 아래의 그래프에서 A는 전체 집단, B는 실험 집단, C는 통제 집단을 나타내며, 빨간 점은 평균, 빨간 리본은 95% 신뢰구간을 나타낸다.


## List 2 Association Memory of Correct Source Response
# long format
p3.Acc.Asc.long.all.2 <- p3 %>% filter(cPE != "pe0", Correct == 1, cSrc == "List_2") %>% group_by(SN, Btw, cPE) %>% 
  summarise(aCorr = mean(aCorr)*100) %>% ungroup()
## `summarise()` has grouped output by 'SN', 'Btw'. You can override using the `.groups` argument.
p3.Acc.Asc.long.exp.2 <- p3.Acc.Asc.long.all.2 %>% filter(Btw==1)
p3.Acc.Asc.long.con.2 <- p3.Acc.Asc.long.all.2 %>% filter(Btw==2)

# wide format
p3.Acc.Asc.swide.all.2 <- p3.Acc.Asc.long.all.2 %>% spread(key = cPE, value = aCorr)
p3.Acc.Asc.swide.exp.2 <- p3.Acc.Asc.swide.all.2 %>% filter(Btw==1)
p3.Acc.Asc.swide.con.2 <- p3.Acc.Asc.swide.all.2 %>% filter(Btw==2)

# summary
p3.Acc.Asc.g.all.2 <- p3.Acc.Asc.long.all.2 %>%  group_by(Btw, cPE) %>% 
  summarise(aCorr.M = mean(aCorr), aCorr.SD = sd(aCorr)) %>% ungroup() 
## `summarise()` has grouped output by 'Btw'. You can override using the `.groups` argument.
p3.Acc.Asc.g.all.2$aCorr.se <- Rmisc::summarySEwithin(data = p3.Acc.Asc.long.all.2, measurevar = "aCorr", 
                                                      idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$se
p3.Acc.Asc.g.all.2$aCorr.ci <- Rmisc::summarySEwithin(data = p3.Acc.Asc.long.all.2, measurevar = "aCorr", 
                                                      idvar = "SN", betweenvars = "Btw", withinvars = "cPE")$ci
p3.Acc.Asc.g.exp.2 <- p3.Acc.Asc.g.all.2 %>% filter(Btw==1)
p3.Acc.Asc.g.con.2 <- p3.Acc.Asc.g.all.2 %>% filter(Btw==2)
p3.Acc.Asc.g.all.2 %>% kable(digits=2)
Btw cPE aCorr.M aCorr.SD aCorr.se aCorr.ci
1 pe1 97.55 4.91 1.06 2.50
1 pe2 95.33 8.96 2.90 6.85
1 pe3 96.51 5.03 2.32 5.48
1 pe4 95.80 6.77 1.45 3.44
2 pe1 92.28 8.84 2.03 4.80
2 pe2 92.14 7.29 2.25 5.33
2 pe3 87.37 9.36 2.77 6.54
2 pe4 93.72 8.19 3.15 7.45
## plot
p3.Asc.all.plot4.2.2 <- ggplot(p3.Acc.Asc.g.all.2, mapping=aes(x=cPE, y=aCorr.M, group=Btw)) + 
  geom_ribbon(aes(ymin=aCorr.M-aCorr.ci, ymax=aCorr.M+aCorr.ci, fill=Btw), alpha=0.5) +
  geom_line(p3.Acc.Asc.g.all.2, mapping=aes(x=cPE, y=aCorr.M, color=Btw), size =1, show.legend = FALSE) +
  geom_pointrange(aes(x = cPE, ymin=aCorr.M, ymax=aCorr.M, color=Btw), position = position_dodge(0), 
                  size = 0.8, show.legend = FALSE) +
  coord_cartesian(ylim = c(20, 100), clip = "on") +
  scale_fill_manual(values = c("#e69f00", "#56b4e9"), labels = c("Experimental", "Control")) +
  scale_color_manual(values = c("#e69f00", "#56b4e9")) + 
  labs(x = "Prediction Error", y = "Association Accuracy (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 2 AM of Correct Source (All Group)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"),
        legend.position = "top")
p3.Asc.exp.plot4.2.2 <- ggplot(p3.Acc.Asc.g.exp.2, mapping=aes(x=cPE, y=aCorr.M, group=1)) + 
  geom_ribbon(aes(ymin=aCorr.M-aCorr.ci, ymax=aCorr.M+aCorr.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=aCorr.M, ymax=aCorr.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Acc.Asc.long.exp.2, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=aCorr, group=SN, color=SN)) +
  geom_point(p3.Acc.Asc.long.exp.2, mapping = aes(x=cPE, y=aCorr, color=SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(20, 100), clip = "on") +
  labs(x = "Prediction Error", y = "Association Accuracy (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 2 AM of Correct Source (Exp)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
p3.Asc.con.plot4.2.2 <- ggplot(p3.Acc.Asc.g.con.2, mapping=aes(x=cPE, y=aCorr.M, group=1)) + 
  geom_ribbon(aes(ymin=aCorr.M-aCorr.ci, ymax=aCorr.M+aCorr.ci), fill="darkred", alpha=0.3) + geom_line(colour="darkred", size = 1) +
  geom_pointrange(aes(x = cPE, ymin=aCorr.M, ymax=aCorr.M), position = position_dodge(0.65), 
                  color = "darkred", size = 0.8, show.legend = FALSE) +
  geom_line(p3.Acc.Asc.long.con.2, alpha = 0.7, show.legend = FALSE,
            mapping=aes(x=cPE, y=aCorr, group=SN, color=SN)) +
  geom_point(p3.Acc.Asc.long.con.2, mapping = aes(x=cPE, y=aCorr, color=SN), size = 3, alpha = .22, show.legend = FALSE) +
  coord_cartesian(ylim = c(20, 100), clip = "on") +
  labs(x = "Prediction Error", y = "Association Accuracy (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # ggtitle("List 2 AM of Correct Source (Con)") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border=element_blank(),
        plot.margin = margin(0.3, 0.3, 0.3, 0.3, "cm"))
ggpubr::ggarrange(p3.Asc.all.plot4.2.2, p3.Asc.exp.plot4.2.2, p3.Asc.con.plot4.2.2, ncol=3, labels=c("A) All Group", "B) Experimental", "C) Control"))


집단과 예측 오류를 요인으로 하는 2 X 4 혼합 요인 분산분석을 수행하였다.


p3.Acc.all.aov.Asc.2 <- aov_ez(id = "SN", dv = "aCorr", data = p3.Acc.Asc.long.all.2, between = "Btw", within = "cPE")
anova(p3.Acc.all.aov.Asc.2, es = "pes") %>% kable(digits=3)
num Df den Df MSE F pes Pr(>F)
Btw 1.000 14.000 90.656 4.273 0.234 0.058
cPE 2.125 29.755 65.888 0.642 0.044 0.542
Btw:cPE 2.125 29.755 65.888 0.828 0.056 0.453

분석 결과, 모든 효과가 유의하지 않았다.



save(list=ls(), file="memudt_pe_pilot.Rdata")


3 PLOT

3.1 Day 1 & 2. Association Memory Performance

p12.L.g.L1 <- p12.L.g.all %>% filter(day == "day1")
p12.L.g.L1$Btw <- factor(p12.L.g.L1$Btw, labels=c("Experimental", "Control"))
p12.L.g.L1.plot1 <- ggplot(data=p12.L.g.L1, 
                           aes(x=Block, y=ACC.M, ymin=ACC.M-ci, ymax=ACC.M+ci, color=Btw, shape=Btw)) +
  geom_point(size = 4, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = Btw), position = position_dodge(.3)) + 
  scale_color_manual(values = c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(20,100), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  labs(x = "Block", y = "Accuracy (%)") +
  theme_bw(base_size = 18) +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.65, 0.35),
        legend.title = element_blank(),
        aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.5, 0.3, 0.3, "cm"),
        legend.key = element_blank())

p12.L.g.L2 <- p12.L.g.all %>% filter(day == "day2")
p12.L.g.L2$Btw <- factor(p12.L.g.L2$Btw, labels=c("Experimental", "Control"))
p12.L.g.L2.plot1 <- ggplot(data=p12.L.g.L2, 
                           aes(x=Block, y=ACC.M, ymin=ACC.M-ci, ymax=ACC.M+ci, color=Btw, shape=Btw)) +
  geom_point(size = 4, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = Btw), position = position_dodge(.3)) + 
  scale_color_manual(values = c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(20,100), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  labs(x = "Block", y = "Accuracy (%)") +
  theme_bw(base_size = 18) +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.65, 0.35),
        legend.title = element_blank(),
        aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())


p12.L.rt.g.L1 <- p12.L.rt.g.all %>% filter(day == "day1")
p12.L.rt.g.L1$Btw <- factor(p12.L.g.L1$Btw, labels=c("Experimental", "Control"))
p12.L.rt.g.L1.plot1 <- ggplot(data=p12.L.rt.g.L1 , 
                              aes(x=Block, y=RT.M, ymin=RT.M-ci, ymax=RT.M+ci, color=Btw, shape=Btw)) +
  geom_point(size = 4, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = Btw), position = position_dodge(.3)) + 
  scale_color_manual(values = c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(0,1800), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  labs(x = "Block", y = "Response Time (ms)") +
  theme_bw(base_size = 18) +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.65, 0.85),
        legend.title = element_blank(),
        aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.5, 0.3, 0.3, "cm"),
        legend.key = element_blank())

p12.L.rt.g.L2 <- p12.L.rt.g.all %>% filter(day == "day2")
p12.L.rt.g.L2$Btw <- factor(p12.L.g.L2$Btw, labels=c("Experimental", "Control"))
p12.L.rt.g.L2.plot1 <- ggplot(data=p12.L.rt.g.L2 , 
                              aes(x=Block, y=RT.M, ymin=RT.M-ci, ymax=RT.M+ci, color=Btw, shape=Btw)) +
  geom_point(size = 4, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = Btw), position = position_dodge(.3)) + 
  scale_color_manual(values = c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(0,1800), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("1", "2", "3", "4")) +
  labs(x = "Block", y = "Response Time (ms)") +
  theme_bw(base_size = 18) +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.65, 0.85),
        legend.title = element_blank(),
        aspect.ratio = 0.6,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())

d1_d2_asc_all2_pilot<- ggpubr::ggarrange(p12.L.g.L1.plot1, p12.L.g.L2.plot1, p12.L.rt.g.L1.plot1, p12.L.rt.g.L2.plot1, nrow = 2, ncol=2, 
                                 labels=c("A. List 1","B. List 2"," "," "),
                                 hjust = -0.05, vjust=1, font.label = list(size = 20))
d1_d2_asc_all2_pilot

# ggsave("d1&d2_asc_all_pilot.jpg", plot = d1_d2_asc_all2_pilot, width=8, height=6, unit='in', dpi=600)


3.2 Day 3. Asymmetric Patterns of Source Misattribution

p3.AsyPtt.long.all.p2 <- p3.AsyPtt.long.all %>% filter(cSrc != "List_3", Resp != "New")
p3.AsyPtt.g.all.p2 <- p3.AsyPtt.g.all %>% filter(cSrc != "List_3", Resp != "New")
p3.all.plot3.pilot <- ggplot(data=p3.AsyPtt.long.all.p2, aes(x=cSrc, y=Rsp, fill=Resp)) +
  stat_summary(fun = mean, geom = "bar", position="dodge", na.rm = TRUE, alpha = .9, width = 0.8, colour="black", size = 1.02) +
  geom_pointrange(data=p3.AsyPtt.g.all.p2, aes(x = cSrc, y=Rsp.M, ymin = Rsp.M-Rsp.ci, ymax = Rsp.M+Rsp.ci),
                  position = position_dodge(0.80), color = "darkred", size = 1, show.legend = FALSE) +
  # geom_point(data=p3.AsyPtt.g.all.p2, aes(x = cSrc, y=Rsp.M),
                  # position = position_dodge(0.80), color = "black", size = 5, show.legend = FALSE) +
  # geom_errorbar(data=p3.AsyPtt.g.all.p2, aes(x=cSrc, ymin = Rsp.M-Rsp.ci, ymax = Rsp.M+Rsp.ci), size = 1, width = .2, position = position_dodge(0.8)) +
  facet_grid(.~Btw, scales="free_x", space = "free",
             labeller = labeller(Btw = c("1" = "Experimental Group","2" = "Control Group"))) +
  scale_x_discrete(labels=c("List 1","List 2")) +
  scale_fill_manual(values = c("#feb24c", "#91bfdb"),
  # scale_fill_manual(values = c("#a3d8d7", "#ed9b5d"),#a3d8d7 #72c2c8
  # scale_fill_manual(values = c("#feb24c", "#4292c6"),
  # scale_fill_manual(values = c("#c6d9f1", "#254061"),
                    labels = c("Day 1 Response", "Day 2 Response")) +
  coord_cartesian(ylim = c(0, 105), clip = "on") +
  labs(x = "Source Response by Object List", y = "Proportion of Response (%)", fill ="Attribution") +
  # ggtitle("Source Memory Response") +
  theme_bw(base_size = 15) +
  theme(axis.title = element_text(face = "bold", size = 16, color = "black"),
        axis.text = element_text(face = "plain", hjust = 0.5, size = 15, color = "black"),
        axis.line=element_line(),
        strip.text.x = element_text(face = "plain", size = 15, color = "black"),
        strip.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.spacing=unit(1, "lines"),
        plot.margin = margin(1, 0.3, 1, 0.3, "cm"), 
        # plot.title = element_text(hjust = 0.5),
        legend.position=c(0.8, 0.85))
p3.all.plot3.pilot

# ggsave("d3_Src_asyptt_all_pilot3.jpg", plot = p3.all.plot3.pilot, width=6, height=6, unit='in', dpi=600)


3.3 Day 3. Non-monotonic Patterns of Memory Updating

# Intrusion
p3.Intru.g.all.p3 <- p3.Intru.g.all
p3.Intru.g.all.p3$Btw <- factor(p3.Intru.g.all.p3$Btw, labels=c("Experimental", "Control"))

p3.plot2.1.all.p3.pilot <- ggplot(data=p3.Intru.g.all.p3, 
                            aes(x=cPE, y=Intru.M, ymin=Intru.M-Intru.ci, ymax=Intru.M+Intru.ci, color=Btw, shape=Btw)) +
  geom_point(size = 4, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = Btw), position = position_dodge(.3)) + 
  scale_color_manual(values = c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(0,70), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  labs(x = "Prediction Error", y = "Intrusion (%)") +
  theme_bw(base_size = 18) +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.75, 0.85),
        legend.title = element_blank(),
        aspect.ratio = 1,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.3, "cm"),
        legend.key = element_blank())
p3.plot2.1.all.p3.pilot

# ggsave("d3_Src_nmon_int_pilot2.jpg", plot = p3.plot2.1.all.p3.pilot, width=6, height=6, unit='in', dpi=600)
p3.Acc.g.all.1.p3 <- p3.Acc.g.all.1
p3.Acc.g.all.1.p3$Btw <- factor(p3.Acc.g.all.1.p3$Btw, labels=c("Experimental", "Control"))
p3.plot2.2.all.1.p3 <- ggplot(data=p3.Acc.g.all.1.p3, 
                              aes(x=cPE, y=Acc.M, ymin=Acc.M-Acc.ci, ymax=Acc.M+Acc.ci, color=Btw, shape=Btw)) +
  geom_point(size = 4, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = Btw), position = position_dodge(.3)) + 
  scale_color_manual(values = c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(40,100), clip = "on") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # scale_y_continuous(breaks = seq(0,80)) +
  labs(x = "Prediction Error", y = "List 1 Correct (%)") +
  theme_bw(base_size = 18) +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.75, 0.25),
        legend.title = element_blank(),
        aspect.ratio = 1,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.5, 0.3, 0.3, "cm"),
        legend.key = element_blank())
# p3.plot2.2.all.1.p3

# source confusion
p3.Err.g.all.p3 <- p3.Err.g.all
p3.Err.g.all.p3$Btw <- factor(p3.Err.g.all.p3$Btw, labels=c("Experimental", "Control"))

p3.plot2.3.all.1.p3 <- ggplot(data=p3.Err.g.all.p3, 
                              aes(x=cPE, y=Err.M, ymin=Err.M-Err.ci, ymax=Err.M+Err.ci, color=Btw, shape=Btw)) +
  geom_point(size = 4, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = Btw), position = position_dodge(.3)) + 
  scale_color_manual(values = c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(0,70), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  labs(x = "Prediction Error", y = "Source Confusion (%)") +
  theme_bw(base_size = 18) +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.75, 0.85),
        legend.title = element_blank(),
        aspect.ratio = 1,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())
# p3.plot2.3.all.1.p3

# List 2 Correct
p3.Acc.g.all.2.p3 <- p3.Acc.g.all.2
p3.Acc.g.all.2.p3$Btw <- factor(p3.Acc.g.all.2.p3$Btw, labels=c("Experimental", "Control"))

p3.plot2.2.all.2.p3 <- ggplot(data=p3.Acc.g.all.2.p3, 
                              aes(x=cPE, y=Acc.M, ymin=Acc.M-Acc.ci, ymax=Acc.M+Acc.ci, color=Btw, shape=Btw)) +
  geom_point(size = 4, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = Btw), position = position_dodge(.3)) + 
  scale_color_manual(values = c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(40,100), clip = "on") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  # scale_y_continuous(breaks = seq(0,80)) +
  labs(x = "Prediction Error", y = "List 2 Correct (%)") +
  theme_bw(base_size = 18) +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.75, 0.25),
        legend.title = element_blank(),
        aspect.ratio = 1,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.5, 0.3, 0.3, "cm"),
        legend.key = element_blank())
# p3.plot2.2.all.2.p3

# Intrusion
p3.Intru.g.all.p3 <- p3.Intru.g.all
p3.Intru.g.all.p3$Btw <- factor(p3.Intru.g.all.p3$Btw, labels=c("Experimental", "Control"))

p3.plot2.1.all.p3 <- ggplot(data=p3.Intru.g.all.p3, 
                            aes(x=cPE, y=Intru.M, ymin=Intru.M-Intru.ci, ymax=Intru.M+Intru.ci, color=Btw, shape=Btw)) +
  geom_point(size = 4, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = Btw), position = position_dodge(.3)) + 
  scale_color_manual(values = c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(0,70), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  labs(x = "Prediction Error", y = "Intrusion (%)") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  theme_bw(base_size = 18) +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.75, 0.85),
        legend.title = element_blank(),
        aspect.ratio = 1,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.5, "cm"),
        legend.key = element_blank())
# p3.plot2.1.all.p3

d3_nmon_src<- ggpubr::ggarrange(p3.plot2.2.all.1.p3, p3.plot2.2.all.2.p3, p3.plot2.3.all.1.p3, p3.plot2.1.all.p3, nrow = 2, ncol=2, 
                          labels=c("A","B","C","D"),
                          hjust = -0.05, vjust=1, font.label = list(size = 20))
d3_nmon_src

# ggsave("d3_Src_nmon_all_pilot3.jpg", plot = d3_nmon_src, width=12, height=12, unit='in', dpi=600)
p3.US.g.all.p3 <- p3.US.g.all
p3.US.g.all.p3$Btw <- factor(p3.US.g.all.p3$Btw, labels=c("Experimental", "Control"))

p3.plot5.1.all.p3 <- ggplot(data=p3.US.g.all.p3, 
                            aes(x=cPE, y=US.M, ymin=US.M-US.ci, ymax=US.M+US.ci, color=Btw, shape=Btw)) +
  geom_point(size = 4, position = position_dodge(.3)) +
  geom_errorbar(width = .2, position = position_dodge(.3)) +
  geom_line(aes(group = Btw), position = position_dodge(.3)) + 
  scale_color_manual(values = c("red", "black")) +
  # scale_shape_manual(values = c("red", "black"), labels = c("Experimental", "Control")) +
  coord_cartesian(ylim = c(-50,50), clip = "on") +
  # scale_y_continuous(breaks = seq(0,80)) +
  labs(x = "Prediction Error", y = "Updating Score") +
  scale_x_discrete(labels = c("PE 1", "PE 2", "PE 3", "PE 4")) +
  theme_bw(base_size = 18) +
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.75, 0.20),
        legend.title = element_blank(),
        aspect.ratio = 1,
        legend.background = element_blank(),
        plot.margin = margin(1, 0.3, 0.3, 0.3, "cm"),
        legend.key = element_blank())
p3.plot5.1.all.p3

# ggsave("d3_Src_nmon_US_pilot3.jpg", plot = p3.plot5.1.all.p3, width=6, height=6, unit='in', dpi=600)



4 SessionInfo

sessionInfo()
## R version 4.1.1 (2021-08-10)
## Platform: aarch64-apple-darwin20 (64-bit)
## Running under: macOS Monterey 12.1
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] parallel  stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
##  [1] klippy_0.0.0.9500    patchwork_1.1.0.9000 MuMIn_1.43.17       
##  [4] ggpubr_0.4.0         psycho_0.6.1         nortest_1.0-4       
##  [7] rcompanion_2.4.13    matlab_1.0.2         scales_1.1.1        
## [10] apaTables_2.0.8      RVAideMemoire_0.9-81 ggbeeswarm_0.6.0    
## [13] gridExtra_2.3        psych_2.1.9          ordinal_2019.12-10  
## [16] emmeans_1.6.3        afex_1.0-1           lme4_1.1-27.1       
## [19] Matrix_1.3-4         car_3.0-11           carData_3.0-4       
## [22] knitr_1.34           papaja_0.1.0.9997    forcats_0.5.1       
## [25] stringr_1.4.0        dplyr_1.0.7          purrr_0.3.4         
## [28] readr_2.0.1          tidyr_1.1.3          tibble_3.1.4        
## [31] ggplot2_3.3.5        tidyverse_1.3.1      Rmisc_1.5           
## [34] plyr_1.8.6           lattice_0.20-44      pacman_0.5.1        
## 
## loaded via a namespace (and not attached):
##   [1] readxl_1.3.1        backports_1.2.1     splines_4.1.1      
##   [4] usethis_2.0.1       TH.data_1.1-0       digest_0.6.28      
##   [7] htmltools_0.5.2     lmerTest_3.1-3      fansi_0.5.0        
##  [10] memoise_2.0.0       magrittr_2.0.1      remotes_2.4.0      
##  [13] tzdb_0.1.2          openxlsx_4.2.4      modelr_0.1.8       
##  [16] matrixStats_0.61.0  sandwich_3.0-1      prettyunits_1.1.1  
##  [19] colorspace_2.0-2    rvest_1.0.1         haven_2.4.3        
##  [22] xfun_0.26           callr_3.7.0         crayon_1.4.1       
##  [25] jsonlite_1.7.2      libcoin_1.0-9       Exact_3.1          
##  [28] survival_3.2-11     zoo_1.8-9           glue_1.4.2         
##  [31] gtable_0.3.0        pkgbuild_1.2.0      abind_1.4-5        
##  [34] mvtnorm_1.1-2       DBI_1.1.1           rstatix_0.7.0      
##  [37] Rcpp_1.0.7          xtable_1.8-4        tmvnsim_1.0-2      
##  [40] foreign_0.8-81      proxy_0.4-26        stats4_4.1.1       
##  [43] httr_1.4.2          ellipsis_0.3.2      modeltools_0.2-23  
##  [46] farver_2.1.0        pkgconfig_2.0.3     multcompView_0.1-8 
##  [49] dbplyr_2.1.1        utf8_1.2.2          labeling_0.4.2     
##  [52] tidyselect_1.1.1    rlang_0.4.11        reshape2_1.4.4     
##  [55] cachem_1.0.6        munsell_0.5.0       cellranger_1.1.0   
##  [58] tools_4.1.1         cli_3.0.1           generics_0.1.0     
##  [61] devtools_2.4.2      broom_0.7.9.9000    evaluate_0.14      
##  [64] fastmap_1.1.0       yaml_2.2.1          processx_3.5.2     
##  [67] fs_1.5.0            zip_2.2.0           coin_1.4-2         
##  [70] rootSolve_1.8.2.3   nlme_3.1-152        xml2_1.3.2         
##  [73] pbkrtest_0.5.1      compiler_4.1.1      rstudioapi_0.13    
##  [76] beeswarm_0.4.0      curl_4.3.2          testthat_3.0.4     
##  [79] e1071_1.7-9         ggsignif_0.6.3      reprex_2.0.1       
##  [82] DescTools_0.99.44   stringi_1.7.4       highr_0.9          
##  [85] ps_1.6.0            desc_1.3.0          nloptr_1.2.2.2     
##  [88] vctrs_0.3.8         pillar_1.6.2        lifecycle_1.0.0    
##  [91] lmtest_0.9-39       jquerylib_0.1.4     ucminf_1.1-4       
##  [94] estimability_1.3    cowplot_1.1.1       data.table_1.14.0  
##  [97] lmom_2.8            R6_2.5.1            rio_0.5.27         
## [100] vipor_0.4.5         gld_2.6.4           sessioninfo_1.1.1  
## [103] codetools_0.2-18    pkgload_1.2.2       boot_1.3-28        
## [106] MASS_7.3-54         assertthat_0.2.1    rprojroot_2.0.2    
## [109] withr_2.4.2         mnormt_2.0.2        multcomp_1.4-18    
## [112] expm_0.999-6        hms_1.1.0           grid_4.1.1         
## [115] coda_0.19-4         class_7.3-19        minqa_1.2.4        
## [118] rmarkdown_2.11      numDeriv_2016.8-1.1 lubridate_1.7.10